///
/// 插值查找,是对二分法查找的优化
/// 二分法: mid = low + 1/2 (high - low)
/// 插值查找:mid = low + ((point-array[low])/(array[high]-array[low]))(high-low)
/// 插值优化了mid,使之更接近查找数值在有序序列的实际位置
///
///
///
///
///
///
private static int InterpolationSearch(int[] arr, int low, int height, int value)
{
if (arr == null || arr.Length == 0 || low >= height)
{
return -1;
}
int hi = height - 1;
int lowValue = arr[low];
int heightValue = arr[hi];
if (lowValue > value || value > heightValue)
{
return -1;
}
int mid;
while (low <= hi)
{
mid = low + ((value - lowValue) / (heightValue - lowValue)) * (hi - low);
int item = arr[mid];
if (item == value)
{
return mid;
}
else if (item > value)
{
hi = mid - 1;
}
else
{
low = mid + 1;
}
}
return -1;
}
插值查找
最新推荐文章于 2024-01-02 13:22:30 发布