若二分查找【1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16】查找数字1,需要查找多次。
比较二分查找:数据多时,定位比较快。
package search;
public class InsertValueSearch {
public static void main(String[] args){
int[] arr = new int[100];
for (int i=0;i<100;i++){
arr[i] = i+1;
}
int i = InsertValueSearch(arr, 0, arr.length - 1, 2);
System.out.println(i);
}
public static int InsertValueSearch(int[] arr,int left,int right,int findValue){
//findValue<arr[0] ||findValue>arr[arr.length-1] 必须需要,否则mid越界
if (left>right ||findValue<arr[0] ||findValue>arr[arr.length-1]){
return -1;
}
int mid = left + (right-left)*(findValue-arr[left])/(arr[right]-arr[left]);
if (findValue>arr[mid]){
return InsertValueSearch(arr,mid+1,right,findValue);
}else if (findValue<arr[mid]){
return InsertValueSearch(arr,left,mid-1,findValue);
}else {
return mid;
}
}
}