算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是有序不重复的。 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功;若 x 小于当前位置值,则在数列的前半段中查找;若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止。
假设有一个数组{34,56,58,9,2,45,5,45,6,2,12,112},现要求采用二分法找出指定的数值并将其在数组的索引返回,如果没有找到则返回 -1。代码如下:
package cn.xiaoshan.oop.sort;
public class TestBinarySearch {
public static void main(String[] args) {
int array[] = {34,56,58,9,2,45,5,45,6,2,12,112};
testsort.sort(array);
int num = binarySearch(array,111);
if(num != -1){
System.out.println("查找的数据:"+array[num]);
}else{
System.out.println("查不到数据");
}
}
public static int binarySearch(int array[],int value){
int start = 0;
int end = array.length - 1;
if(null == array){
return -1;
}
while(start<=end){
int middle = (start + end)/2;
if(value<array[middle]){
end = middle - 1;
}else if(value > array[middle]){
start = middle + 1;
}else{
return middle;
}
}
return -1;
}
}