package com.study.data.structures.search;
/**
* 插值查找算法:
* 优点:对于数据量较大,关键字分布比较均匀的查找表来说,采用插值查找,速度比较快
*/
public class InterpolationSearch {
public static void main(String[] args) {
int[] array = new int[100];
for (int i = 0; i < 100; i++) {
array[i] = i + 1;
}
int index = interpolationSearch(array, 0, array.length - 1, 100);
System.out.println("当前查找结果是::" + index);
}
/**
* 插值查找算法
*/
public static int interpolationSearch(int[] array, int start, int end, int findValue) {
/**
* findValue < array[start] || findValue > array[end]:用来防止数组越界
*/
if (start > end || findValue < array[start] || findValue > array[end]) {
return -1;
}
/**
* 二分查找:
* middle=1/2*(start+end)
* =>
* middle=start+1/2*(end-start)
*
* 插值查找:
* 改变系数,从而获取到更接近需要查找值得范围
* =>
* middle=start+(findValue-array[start])/(array[end]-array[start])*(end-start)
*
*/
int middle = start + (findValue - array[start]) / (array[end] - array[start]) * (end - start);
int middleValue = array[middle];
if (findValue > middleValue) {//向右继续查找
return interpolationSearch(array, middle + 1, end, findValue);
} else if (findValue < middleValue) {//向左继续查找
return interpolationSearch(array, start, middle - 1, findValue);
} else {//
return middle;
}
}
}
算法学习记录012_插值查找
最新推荐文章于 2025-04-09 23:14:15 发布
本文介绍了插值查找算法,该算法适用于数据量大且关键字分布均匀的查找表。通过计算中间位置的改进方式,插值查找能更快地定位目标值。代码示例展示了在Java中如何实现插值查找,并进行了一组示例查找操作。
2525

被折叠的 条评论
为什么被折叠?



