查找之折半查找
1 #include<stdio.h> 2 #define N 10 3 4 void QuickSort(int a[],int left, int right); 5 int BinSearch(int a[], int low, int high, int key); 6 int main() 7 { 8 int a[N] = {2,8,4,9,7,6,5,3,1,0}; 9 int j = 0, i; 10 QuickSort(a, 0, sizeof(a)/sizeof(a[0])-1); 11 i = BinSearch(a, 0, N-1, 6); 12 printf("%d\n", i); 13 for(j = 0; j < N; j++){ 14 printf("%d ",a[j]); 15 } 16 printf("\n"); 17 return 0; 18 } 19 //折半查找 20 int BinSearch(int a[], int low, int high, int key){ 21 while(low <= high){ 22 int mid = (low + high) / 2; 23 if(a[mid] < key) 24 low = mid + 1; 25 else if(a[mid] > key) 26 high = mid - 1; 27 else 28 return mid; //查找成功 29 } 30 31 return -1; //查找失败 32 } 33 34 void QuickSort(int a[],int left, int right){ 35 int key = a[left]; 36 int i = left; 37 int j = right; 38 if(left >= right){ 39 return; 40 } 41 while(i < j){ 42 while(i<j && a[j] >= key){ 43 j--; 44 } 45 a[i] = a[j]; 46 while(i<j && a[i] <= key){ 47 i++; 48 } 49 a[j] = a[i]; 50 51 } 52 53 a[i] = key; 54 QuickSort(a, left, i-1); 55 QuickSort(a, i+1, right); 56 }