插值查找(Interpolation Search)

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/701 访问。

插值查找是二分查找的更高效版本,它不会每次按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);elsereturn InterpolationSearch(array, key, mid + 1, high);}}

请注意以上递归实现为尾递归,详情参考我的另一篇博文:

C#开发笔记之06-为什么要尽可能的使用尾递归,编译器会为它做优化吗?

以上是插值查找算法的一种实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/701 访问。

10

分析:

在最坏的情况下插值查找的时间复杂度为:  。

C#算法设计查找篇之03-插值查找相关推荐

  1. C#算法设计排序篇之04-选择排序(附带动画演示程序)

    选择排序(Selection Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/681 访问. 选择排序是一种简 ...

  2. C#算法设计查找篇之02-二分查找

    二分查找(Binary Search) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/699 访问. 二分查找也称折半查 ...

  3. C#算法设计查找篇之05-二叉树查找

    二叉树查找(Binary Tree Search) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/706 访问. 二叉排 ...

  4. C#算法设计查找篇之01-顺序查找

    顺序查找(Sequential Search) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/697 访问. 顺序查找也 ...

  5. aspnet实现搜索查询_C#算法设计查找篇之01-顺序查找

    顺序查找也称线性搜索(Linear Search),是在一个已知无(或有序)序队列中找出与给定关键字相同的值的具体位置.原理是让关键字与队列中的第1个(或最后1个)位置的值逐个比较,直到找出与给定关键 ...

  6. C#算法设计排序篇之06-堆排序(附带动画演示程序)

    堆排序(Heap Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/685 访问. 堆排序是指利用堆积树(堆)这 ...

  7. 【算法设计与分析】03 算法及其时间复杂度

    在学习算法的时间复杂度之前,需要了解下面5条概念 什么是算法的时间复杂度? 针对指定基本运算,计数算法所做的运算次数. 什么是基本运算?比较.加法.乘法.置指针.交换- 什么是输入规模?输入串的编码长 ...

  8. C#算法设计排序篇之10-桶排序(附带动画演示程序)

    桶排序(Bucket Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/693 访问. 桶排序的工作原理是将数组 ...

  9. C#算法设计排序篇之11-二叉树排序(附带动画演示程序)

    二叉树排序(Binary Tree Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/695 访问. 二叉树排序 ...

最新文章

  1. Linux文件系统2---VFS的四个主要对象
  2. 8086汇编4位bcd码_逆向工程——汇编基础[一]
  3. Java集合中HashSet的实现原理
  4. 补充部分官方文档里没有的Client Library以及代码提示Schema更新(三)
  5. c语言选择夹答案,单片机串口通讯制作说明
  6. 集群NAS+SSD如虎添翼
  7. 单片机c语言位运算写法,单片机与嵌入式系统中C语言的位运算小记
  8. java性能监视_Java 9和应用程序性能监视的激动人心之处
  9. Bootstrap-select使用说明
  10. 19. GD32F103C8T6入门教程-adc使用教程6-外部中断线11触发adc0
  11. windows 2003 远程桌面记录登陆IP的方法
  12. git-ftp:用git管理ftp服务器简单入门
  13. 计蒜客-三值排序(贪心)
  14. 韩顺平 零基础30天学会Java 学习笔记
  15. UAT测试和SIT测试的区别
  16. matlab 图像噪声去除,基于Matlab的图像去除噪声的研究
  17. Mac如何关闭开机启动项
  18. pid_t 到底是什么?
  19. 第二次作业-时事点评
  20. PS网页版在线使用PS网站源码

热门文章

  1. Kubernetes-DaemonSet(六)
  2. 【实习笔试面试题】2013网易互联网实习笔试算法题-找出最大连续自然数个数
  3. 【C++ STL学习之七】STL算法之find和find_if
  4. DDL修改 删除 使用数据库
  5. 9203-1117-实现数据库的查询功能
  6. mysql知识汇总2019
  7. django-视图中的request对象的属性
  8. jquery-幻灯片效果-编辑中
  9. Python之HTML的解析(网页抓取一)
  10. mac os x 10.8 安装python-mysqldb