二分查找算法
/**
- 二分查找算法
- 要求:给定的数组有序
- 思路:二分查找在有序的条件下,只需要一次次的确定所要查找的值所在的区间。而将这个区间定为上一次查找数组的一般效率无疑是最高的,所以也叫二分查找;;
- 去中间值比较,如果相等则直接返回;
- 右查找:如果中间值偏小,则说明待查找数位于mid后面的1/2数组中,此时要确定mid中间值,就绪要将左边界定为mid+1
- 左查找:如果中间值偏大,则说明待查找数位于mid前面的1/2数组中,此时要确定mid中间值,就绪要将右边界定为mid-1;
*/
public static int erfen(int[] arr,int n){
int l=0;
int r= arr.length-1;
int mid=0;
while (l<=r){
mid=(l+r)/2;
// 判断是否查到
if (arr[mid]==n){
// 查到了,直接返回
return mid;
}else if (arr[mid]>n){//中间值大于待查找数,则向左查找
// 左查找:数组的右边界减小为中间值减去1
r=mid-1;
}else {//否则就右查找
// 右查找时数组左边界变为mid+1
l=mid+1;
}
}
// 查无此数,返回-1;返回啥都行,代表没有这个数
return -1;
}
运行结果: