二分查找

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

待续!

你可能感兴趣的:(二分查找)