public class InsertValueSearch1 {
public static void main(String[] args) {
//插值查找前提同样是有序数组
int [] arr = { 1,2,3,4,5,6,7 };
System.out.println(search(arr, 0, arr.length-1, -8));
}
public static int search( int [] arr, int left, int right, int findVal ) {
//值得注意的是:限定判断一定要设置在最前,用以驱逐不合法数据
if( left > right || findVal > arr[arr.length-1] || findVal < arr[0] ) {
return -1;
}
//插值查找,重点在公式
int mid = left +
(right - left) *
( findVal - arr[left] ) /
( arr[right] - arr[left] );
int midVal = arr[mid];
if( findVal > midVal ) {
return search(arr, mid+1, right, findVal);
}else if( findVal < midVal ) {
return search(arr, left, mid-1, findVal);
}else {
return mid;
}
}
}
【java】【插值查找】
最新推荐文章于 2023-05-30 10:18:14 发布