二分法查找的前提必须数组是经过排序的,这是必须得条件,否则就不能用二分法查找了,
二分法查找就是拿查找的值在数组的中间进行对比,如果是大于这个中间值,说明这个查找的值在后面,那么就从后面的一半中查找,小于就是在前面的一半查找,思路也不复杂,请看代码
package com.zgz.search;
/**
* 二分法查找必须是建立在数组已经是排序的情况下了
*/
public class BinarySearch {
public static void main(String[] args) {
int[] arr = new int[]{0,1,2,3,4,5,6,7,8,9,10};
int target = 11;
int index = testBinarySearch(arr,target);
System.out.println("index:="+index);
}
private static int testBinarySearch(int[] arr,int findValue) {
if(arr==null||arr.length==0){
return -1;
}
if(findValue<arr[0]||findValue>arr[arr.length-1]){
return -1;
}
int begin = 0;
int end = arr.length-1;
int mid = (begin+end)/2;
while (true){
if(arr[mid]==findValue){
return mid;
}else{
if(arr[mid]>findValue){//查找的值在前面
end = mid-1;
}else{//查找的值在后面
begin=mid+1;
}
mid = mid = (begin+end)/2;
}
}
}
}
当然这里是使用了升序针对数组