
文章目录
插值查找(Interpolation Search)
插值查找是二分查找的更高效版本,它不会每次按2平分原问题规模,而是应用一个技巧来尽快的接近目标关键字。
示例
public class Program { public static void Main(string[] args) { int[] array = { 8, 11, 21, 28, 32, 43, 48, 56, 69, 72, 80, 94 }; Console.WriteLine(InterpolationSearch(array, 80, 0, array.Length - 1)); Console.ReadKey(); } private static int InterpolationSearch(int[] array, int key, int low, int high) { if (low > high) return -1; var mid = (int)(low + ((double)key - array[low]) / (array[high] - array[low]) * (high - low)); if (array[mid] == key) return mid; else if (array[mid] > key) return InterpolationSearch(array, key, low, mid - 1); else return InterpolationSearch(array, key, mid + 1, high); } }
请注意以上递归实现为尾递归,详情参考我的另一篇博文:
C#开发笔记之06-为什么要尽可能的使用尾递归,编译器会为它做优化吗?
以上是插值查找算法的一种实现,以下是这个案例的输出结果:
10
分析
在最坏的情况下插值查找的时间复杂度为: 。
AlgorithmMan

AlgorithmMan by Iori,AlgorithmMan是使用C#开发的一套用于算法演示的工具。
下载链接:AlgorithmMan-BinaryTreeSort
本文由 .Net中文网 原创发布,欢迎大家踊跃转载。
转载请注明本文地址:https://www.byteflying.com/archives/701。