Fork me on GitHub

查找之折半查找

 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 }

 

posted @ 2017-04-23 22:38  RongT  阅读(209)  评论(0编辑  收藏  举报