水下功夫做透,水上才能顺风顺水。

二分查找


在数组int[] a = {1,2, 3, 4, 5}(升序)查找2或4会出现start==end的情况;
start =0 end =4 => mid = 2

二分取中比较查找算法仅适用于在有序的数组中查找特定元素的算法。

非递归实现代码,默认被查找数组为升序排列。

 1 int BinarySearch(int arry[],int length,int key)
 2 {
 3     int low = 0,high = length-1, mid;//[low,high]待查元素下标区间
 4     while(low<=high)//只有一个元素的数据就是low=high的情况。
 5     {
 6         /*二分取中*/
 7         mid = (low+high)/2;
 8         /*比较查找*/
 9         if(arry[mid]<key)//只可能在中间元素右侧
10             low = mid+1;
11         else if(key<arry[mid])//只可能在中间元素左侧
12             high = mid-1;
13         else//找到
14             return mid;
15     
16     }
17     return -1;//待查元素找完了,也没找到该值
18 
19 }

 递归实现代码,默认被查找数组为升序排列。

int bsearch(int *p,int low,int high,int key)
{    
    /*二分取中*/
    int mid=(low+high)/2;
    /*两类递归*/
    if(low>high)//已无待查元素
      return -1;
    if(key==p[mid])
      return mid;
    /*两类递进*/
    if(key>p[mid])
      return  bsearch(p,mid+1,high,key);
    else 
      return bsearch(p,low,mid-1,key);
}
posted @ 2015-03-08 09:38  北方寒士  阅读(95)  评论(0编辑  收藏  举报