//二分查找的前提:有序序列
public static int binSearch(int[] arr,int number){
int low=0;
int high=arr.length-1;
int mid;
while(low<=high){ //low<=high是一个关键点,不是low<high
//和mid=(low+high)/2的效果一样
//但是mid=(low+high)/2可能会导致内存溢出
//而mid=low+(high-low)/2可以避免这一点
mid=low+(high-low)/2;
if(number<arr[mid]){
high=mid-1;
}else if(number==arr[mid]){
return mid;
}else{
low=mid+1;
}
}
//必须返回负数,表明没有找到
//-(low+1)是一个良好的解决方法
//-1表示没有找到,如果把它插进来,它应该位于该序列的第1个位置
//-2表示没有找到,如果把它插进来,它应该位于该序列的第2个位置
return -(low+1);
}
二分搜索
最新推荐文章于 2023-01-07 20:29:55 发布