c - 折半查找(二分法检索)

 1 #include <stdio.h>
 2 
 3 #define LEN 10
 4 
 5 /*
 6 折半查找(二分法检索).
 7 */
 8 
 9 int 
10 index_of(int *a, int k) {
11     int l = 0;
12     int r = LEN -1;
13     int m;
14     while(l <= r) {
15         m = (r + l) >> 1;    //右移(即除以2).
16         if(k == a[m])
17             return m;    //找到,则直接返回下标.
18         else if(k > a[m])
19             l = m + 1;
20         else
21             r = m - 1;    
22     }
23     return -1;    //结束循环后,仍未找到,则表示没有.
24 }
25 
26 
27 int
28 main(void) {
29             // 0  1, 2, 3, 4, 5, 6, 7, 8,  9
30     int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 19, 22};
31     int i = index_of(a, 19);
32     printf("%d\n", i);
33 }

 

posted @ 2014-12-11 10:41  wonkju  阅读(273)  评论(0)    收藏  举报