package wjh.serach;
/**
* 折半查找又称二分查找
* 前提条件:待查找的表必须是顺序存储结构且表中记录按关键字有序排列
* 时间效率:O(logn)
*/
public class BinSerach {
/**
*
* @param r要查找的关键字序列数组
* @param n关键字个数
* @param k要查找的关键字
* @return 返回关键字在给定序列的位置下标
*/
public static int binarySerach(int r[],int n,int k){
int right=0,left=n,mid;
while(right<=left){
mid=(right+left)/2;
if(r[mid]==k){
return mid;
}
else{
if(r[mid]>k){//向中间记录的左边部分进行查找
left=mid-1;
}
else{//关键字大于中间记录,则向关键字的右边部分进行查找
right=mid+1;
}
}
}
return -1;//如果while结束之后还没有返回Middle则证明查找失败
}
/**
* 二分查找的递归算法
* @param r
* @param right起始位置
* @param left末位置
* @param k要查找的关键字
* @return 关键字在序列中的位置下标
*/
public static int binartySerachRecursion(int r[],int right,int left,int k){
int middle=-1;
if(right<=left){
middle=(right+left)/2;
if(k==r[middle]){
return middle;
}
else{
if(k<r[middle]){
binartySerachRecursion(r,right,middle-1,k);
}
else{
binartySerachRecursion(r,middle+1,left,k);
}
}
}
return middle;
}
}
二分查找
最新推荐文章于 2024-05-16 08:53:55 发布