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、递归实现
待续!