首先了解一下什么是二分查找?
二分查找是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x。
二分查找的时间复杂度为:
在最好的情况下,即查找一次的时间复杂度为O(1)
在最坏的情况下,即查找到最后一次的时间复杂度为O(log n)
再来结合例子理解一下:
class Scratch {
public static void main(String[] args) {
int[] a = new int[]{1, 21, 32, 43, 54};
//查找43的元素下标
int no=43;
//二分法查找
// a是被查找的数组(必须已经排序的)
// no是目标元素
int index = arraySearch(a, no);
System.out.println(index == -1 ? "该元素不存在" : "该元素下标为" + index);
}
private static int arraySearch(int[] a, int n) {
//开始元素下标:0
int begin=0;
//最后元素下标:a.length-1;
int end=a.length-1;
//开始元素下标只要在结束元素下标的左边,就有机会继续循环
while (begin<=end){
//中间元素下标
int mid=(begin+end)/2;
if(a[mid]==n){
return mid;
}else if(a[mid]<n){
begin=mid+1;//开始元素一直加
}
else {
end=mid-1;//结束元素一直减
}
}
return -1;
}
}