- 定义:当数组中的元素已经排列有序时,可以采用折半/二分查找法查找下一个元素。
题目:请给出在含有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;
}