实际上是对二分查找的改进,所以前提也是排好序的。
但是二分查找,每次都是从中间开始找,如果找的是最左边或是最右边,二分就浪费了时间。
那么,
插值改进的方法:自定义中间值
public static int insertSearch(int []arr,int left,int right,int value){
System.out.println(" 查找次数: ");
if(left>right||value<arr[0]||value>arr[arr.length-1]){
return -1;
}
int mid=left+(right-left)*(value-arr[left])/(arr[right]-arr[left]);
int midVal=arr[mid];
if(value>midVal){ //向右递归
return insertSearch(arr,mid+1,right,value);
}else if(value<midVal){
return insertSearch(arr,left,mid-1,value);
}else{
return mid;
}
}
改变的地方:
int mid=left+(right-left)*(value-arr[left])/(arr[right]-arr[left]);
if(left>right||value<arr[0]||value>arr[arr.length-1]){
return -1;