问题描述
给定n个元素的均匀分布的数组中,找到给定的元素的位置。
啥叫均匀分布?最理想的状态就是,1,3,5,7,9。。。
可以根据均匀分布的特点,计算目标值的预估位置
执行步骤
根据均匀分布的特点,每次找到差不多逼近目标值的那个值,然后进行二分逼近。
代码实现
class GFG {
public static int interpolationSearch(int arr[], int lo,
int hi, int x)
{
int pos;
if (lo <= hi && x >= arr[lo] && x <= arr[hi]) {
// 既然是均匀分布,那么根据均匀分布的公式计算预计值
pos = lo
+ (((x - arr[lo]) / (arr[hi] - arr[lo]))
* (hi - lo));
// 找到了
if (arr[pos] == x)
return pos;
// 右侧搜索
if (arr[pos] < x)
return interpolationSearch(arr, pos + 1, hi,
x);
// 左侧搜索
if (arr[pos] > x)
return interpolationSearch(arr, lo, pos - 1,
x);
}
return -1;
}
}