插值查找算法的思路
插值查找算法的基本思路是与二分查找是类似的,只不过是将索引的求法变为了:
mid = left + (right - left)*(findVal - arr[left])/(arr[right] - arr[left])
插值查找算法的代码实现
public static int insertValueSearch(int[] arr,int left,int right,int findVal){
//该条件必须需要,否则得到的mid容易越界
if (left > right || findVal < arr[0] || findVal > arr[arr.length-1]){
return -1;
}
int mid = left + (right - left) * (findVal - arr[left]) / (arr[right] - arr[left]);
int midVal = arr[mid];
if (findVal > midVal){//向右递归
return insertValueSearch(arr,mid + 1,right,findVal);
}else if (findVal < midVal){
return insertValueSearch(arr,left,mid - 1,findVal);
}else{
return mid;
}
}