Java——二分查找法
二分折半查找,效率比较高,每次都从范围最中间开始比较,然后逐渐缩小范围,二分折半查找法的要求就是该序列在使用之前一定是要有序的,不然二分折半查找对其没有作用。
先分析一下折半查找
int[] a={1,2,3,4,5,6,7,8,9,10,11,12};
//在这里我们先定义一个数组
然后我们查找一个10这个数字,第一次比较的时候,由两边的位置来找到中间的位置然后和中间的进行比较,中间的位置是6,10比6大,所有在右边的范围里面再找一个中间的数进行比较,右边从6开始寻找,因为位置5的那个数字已经比较过了再比较一次没有意义,我们找到中间位置8,在该位置上的数就9,10还是比9大,然后我们在从右边开始找,我们再通过上面寻找的方法找到中间位置9,正好10相等,返回该数的位置。
left right middle
第一次 0 11 5
第二次 6 11 8
第三次 7 11 9
下面是实现的代码
public class Test01 {
public static void main(String[] args) {
int[] a={1,2,3,4,5,6,7,8,9,10,11,21};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
System.out.println(binarySearch(a,6));
}
public static int binarySearch(int a[],int searchNum){
int left=0;
int right=a.length-1;
int middle=(right+left)/2;
while(left<=right){
middle=(right+left)/2;
if(searchNum==a[middle]){
return middle;
}else if(searchNum<a[middle]){
right=middle-1;
}else{
left=middle+1;
}
}
return -1;
}
}