二分查找

1、死循环实现

View Code
 1 //二分法查找
 2 /********************算法描述***********************
 3 假设一个没有重复的序列
 4 1、确定小大边界,小边界初始为0,大边界初始为length,以及中间边界
 5 2、将查找的数字与小大中比较,如果刚好等于,则返回
 6 3、如果比中间边界的值小,则小边界不变,中间边界作为大边界
 7 4、否则中间边界作为小边界,大边界不变
 8 补充,如果大边界-大边界的差为1,则不需要继续比较了,返回没有找到
 9 5、循环到2 
10 ***************************************************/
11 int SearchByHalf(int array[],int length,int id)
12 {
13     int iMin,iMid,iMax;
14     iMin = 0;
15     iMax = length-1;
16     while(1)
17     {
18         iMid = (iMax-iMin)/2+iMin;
19         if(array[iMax] == id) return iMax;
20         if(array[iMin] == id) return iMin;
21         if(array[iMid] == id) return iMid;
22         if(array[iMid] > id)
23         {
24             iMax = iMid;
25         }
26         else if(array[iMid] < id)
27         {
28             iMin = iMid;
29         }
30         if(iMax - iMin == 1) return -1;//没有找到
31     }
32 }
33 
34 int main()
35 {
36     int a[10] = {7,2,8,3,9,10,15,11,20,17};
37     int index = SearchByHalf(a,sizeof(a)/sizeof(int),20);
38     printf("%d\n",index);
39     return 0;
40 }


2、递归实现

待续!

原文地址:https://www.cnblogs.com/jiese/p/2566520.html