C#算法设计查找篇之03-插值查找
插值查找(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-插值查找相关推荐
- C#算法设计排序篇之04-选择排序(附带动画演示程序)
选择排序(Selection Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/681 访问. 选择排序是一种简 ...
- C#算法设计查找篇之02-二分查找
二分查找(Binary Search) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/699 访问. 二分查找也称折半查 ...
- C#算法设计查找篇之05-二叉树查找
二叉树查找(Binary Tree Search) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/706 访问. 二叉排 ...
- C#算法设计查找篇之01-顺序查找
顺序查找(Sequential Search) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/697 访问. 顺序查找也 ...
- aspnet实现搜索查询_C#算法设计查找篇之01-顺序查找
顺序查找也称线性搜索(Linear Search),是在一个已知无(或有序)序队列中找出与给定关键字相同的值的具体位置.原理是让关键字与队列中的第1个(或最后1个)位置的值逐个比较,直到找出与给定关键 ...
- C#算法设计排序篇之06-堆排序(附带动画演示程序)
堆排序(Heap Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/685 访问. 堆排序是指利用堆积树(堆)这 ...
- 【算法设计与分析】03 算法及其时间复杂度
在学习算法的时间复杂度之前,需要了解下面5条概念 什么是算法的时间复杂度? 针对指定基本运算,计数算法所做的运算次数. 什么是基本运算?比较.加法.乘法.置指针.交换- 什么是输入规模?输入串的编码长 ...
- C#算法设计排序篇之10-桶排序(附带动画演示程序)
桶排序(Bucket Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/693 访问. 桶排序的工作原理是将数组 ...
- C#算法设计排序篇之11-二叉树排序(附带动画演示程序)
二叉树排序(Binary Tree Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/695 访问. 二叉树排序 ...
最新文章
- Linux文件系统2---VFS的四个主要对象
- 8086汇编4位bcd码_逆向工程——汇编基础[一]
- Java集合中HashSet的实现原理
- 补充部分官方文档里没有的Client Library以及代码提示Schema更新(三)
- c语言选择夹答案,单片机串口通讯制作说明
- 集群NAS+SSD如虎添翼
- 单片机c语言位运算写法,单片机与嵌入式系统中C语言的位运算小记
- java性能监视_Java 9和应用程序性能监视的激动人心之处
- Bootstrap-select使用说明
- 19. GD32F103C8T6入门教程-adc使用教程6-外部中断线11触发adc0
- windows 2003 远程桌面记录登陆IP的方法
- git-ftp:用git管理ftp服务器简单入门
- 计蒜客-三值排序(贪心)
- 韩顺平 零基础30天学会Java 学习笔记
- UAT测试和SIT测试的区别
- matlab 图像噪声去除,基于Matlab的图像去除噪声的研究
- Mac如何关闭开机启动项
- pid_t 到底是什么?
- 第二次作业-时事点评
- PS网页版在线使用PS网站源码