public class InsertValueSearch {
public static void main(String[] args) {
// 生成一个-10-89的数组
int[] arr = new int[100];
for (int i = 0; i < 100; i++) {
arr[i] = i - 10;
}
int index = insValSear(arr, 0, arr.length - 1, -1);
if (index == -2) {
System.out.println("该数未找到!");
} else {
System.out.println("该数在第" + index + "位。");
}
}
// 插值查找的高效性只针对数据量大、元素均匀分布的数组
public static int insValSear(int[] arr, int start, int end, int value) {
if (start <= end && value >= arr[0] && value <= arr[arr.length - 1]) {
int mid = start + (end - start) * (value - arr[start]) / (arr[end] - arr[start]);
int midValue = arr[mid];
if (value < midValue) {
return insValSear(arr, start, mid - 1, value);
} else if (value > midValue) {
return insValSear(arr, mid + 1, end, value);
} else {
return mid;
}
}
return -2;
}
}