折半查找又称二分查找,只能适用于有序的顺序表。
//折半查找
int Bsearch(int R[],int low,int high,int key){
int min;
while(low<=high){
mid=(low+high)/2; //取中间位置
if(R[mid]==key) //查找成功
return mid;
else if(R[mid]>key)
high=mid-1; //从前半部分继续查找
else
low=mid+1; //从后半部分继续查找
}
return -1; //查找失败
}
折半查找的过程可用二叉树来描述,称为判定树。圆形结点表示数组中存在的元素,矩形叶结点表示查找失败的元素。
等概率查找时,n个元素查找成功的ASL(平均查找长度)=log(n+1),log(n+1)应向上取整,但是那个符号敲不出来。。。