• 定义:当数组中的元素已经排列有序时,可以采用折半/二分查找法查找下一个元素。

题目:请给出在含有12个元素的有序表{1,4,10,16,17,18,23,29,33,40,50,51}中二分查找关键字17的过程。

下面的函数biSearch(int r[],int low,int high,int key)用非递归方式在数组r中进行二分查找,函数biSearch_rec(int r[],int low,int high,int key)采用递归方式在数组r中进行二分查找,函数的返回值都为所找到元素的下标;若找不到,则返回-1

int biSearch(int r[],int low,int high,int key) 
                                //r[low..high]中的元素按非递减顺序排序
{ int mid;
while(low<=high){
    mid=(low+high)/2;
    if(key==r[mid])
       return mid;
    else if(key<r[mid])
       high=mid-1;
    else
       low=mid+1;
    }         
return -1;
}

int biSearch(int r[],int low,int high,int key)  
                                //r[low..high]中的元素按非递减顺序排序

{ int mid;

if(low<=high){

    mid=(low+high)/2;

    if(key==r[mid])

       return mid;

    else if(key<r[mid])

       return biSearch_rec(r,low,mid-1,key);    

    else

       return biSearch_rec(r,mid+1,high,key);

    }          
return -1;

}