代码:
package com.wangyq.datastructrue.search;
import java.util.Arrays;
public class InterpolationSearch {
public static void main(String[] args) {
int[] ints = {1, 6, 18, 19, 37, 50, 61, 69, 76, 81, 83, 99, 108, 113, 114, 121, 124, 156, 180, 197};
System.out.println(Arrays.toString(ints));
int index = interpolationSearch(ints, 0, ints.length - 1, 121);
System.out.println("第" + (index + 1) + "个");
}
private static int interpolationSearch(int[] ints, int l, int r, int serchInt) {
if (l > r) {
return -1;
}
//按值得比例计算大体位置
int midIndex = l + (r - l) * (serchInt - ints[l]) / (ints[r] - ints[l]);
//取中间值
int mid = ints[midIndex];
//进行比较
if (serchInt > mid) {
return interpolationSearch(ints, midIndex + 1, r, serchInt);
} else if (serchInt < mid) {
return interpolationSearch(ints, l, midIndex - 1, serchInt);
} else {
return midIndex;
}
}
}
运行结果:
[1, 6, 18, 19, 37, 50, 61, 69, 76, 81, 83, 99, 108, 113, 114, 121, 124, 156, 180, 197]
第16个