插值查找,有序表的一种查找方式。插值查找是根据查找关键字与查找表中最大最小记录关键字比较后的查找方法。插值查找基于二分查找,将查找点的选择改进为自适应选择,提高查找效率。

原理:    (midIndex-lowIndex) /(highIndex-lowIndx)  的比值 ≈≈(value-a[low])/(a[high]-a[low]))的比值

代码如下

      /// <summary>
/// 插值查找
/// </summary>
/// <param name="arr">数组</param>
/// <param name="low">初始索引</param>
/// <param name="high">末尾索引</param>
/// <param name="value">要找的值</param>
/// <returns></returns>
static int InsertSearch(int[] arr,int low,int high,int value)
{
if (arr == null || arr.Length == 0 || low >= high)
{
return -1;
}
int mid;
while (low <= high)
{
mid = low+((value - arr[low]) / (arr[high] - arr[low]))*(high-low);// 插值查找的核心代码
if (value > arr[mid])//值在arr[mid]的右边
{
low = mid + 1;
}
if(value<arr[mid])//值在arr[mid]的左边
{
high = mid - 1;
}
if(value==arr[mid])
{
return mid;
}
}
return -1;
}

其实还有第二种写法,递归,写法差不多,不会的去看我的上一篇“二分查找”

运行结果

           Console.WriteLine($"数据算法");
Random random = new Random(); var arr1 = GetArrayData(20, 1,15 );
Console.WriteLine($"生成未排序数据arr1:{ShowArray(arr1)}"); var arr5 = QuickSort(arr1, 0, arr1.Length - 1);
Console.WriteLine($"快速排序arr5:{ShowArray(arr5)}"); var randomIndex = random.Next(0, arr5.Length);
var arr5Index= InsertSearch(arr5, 0, arr5.Length - 1, arr5[randomIndex]);
Console.WriteLine($"{arr5[randomIndex]}在 arr5中出现的索引位置是{arr5Index}"); Console.ReadLine();

C#查找算法2:插值查找的更多相关文章

  1. Java中的查找算法之顺序查找(Sequential Search)

    Java中的查找算法之顺序查找(Sequential Search) 神话丿小王子的博客主页 a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数 ...

  2. C语言查找算法之顺序查找、二分查找(折半查找)

    C语言查找算法之顺序查找.二分查找(折半查找),最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 顺序查找 /*顺序查找 顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的 ...

  3. 数据结构与算法之PHP查找算法(二分查找)

    二分查找又称折半查找,只对有序的数组有效. 优点是比较次数少,查找速度快,平均性能好,占用系统内存较少: 缺点是要求待查表为有序表,且插入删除困难. 因此,折半查找方法适用于不经常变动而查找频繁的有序 ...

  4. 数据结构与算法之PHP查找算法(顺序查找)

    对于查找数据来说,最简单的方法就是从列表的第一个元素开始对列表元素逐个进行判断,直到找到了想要的结果,或者直到列表结尾也没有找到,这种方法称为顺序查找. 一.基本写法 顺序查找的实现很简单.只要从列表 ...

  5. python实现查找算法:二分查找法

    二分查找算法也称折半查找,基本思想就是折半,和平时猜数字游戏一样,比如猜的数字时67,猜测范围是0-100,则会先猜测中间值50,结果小了,所以就会从50-100猜测,中间值为75,结果大了,又从50 ...

  6. Java查找算法之二分查找

    二分查找是一种查询效率非常高的查找算法.又称折半查找. 一.算法思想 有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功. 一个情景:将表中间位置 ...

  7. 查找算法(顺序查找、二分法查找、二叉树查找、hash查找)

    查找功能是数据处理的一个基本功能.数据查找并不复杂,但是如何实现数据又快又好地查找呢?前人在实践中积累的一些方法,值得我们好好学些一下.我们假定查找的数据唯一存在,数组中没有重复的数据存在. (1)顺 ...

  8. 查找算法:二分法查找及其python实现案例

    承接上一篇:查找:顺序查找与二分法查找,将二分法更多详细的python实现解题写下笔记. 简单方法 ''' 二分法查找在列表中的用户输入值,返回index 三种情况跳出循环体: LR相邻 LR位置重合 ...

  9. python数组查找算法---bisect二分查找插入

    1 实例 这个模块只有几个函数, 一旦决定使用二分搜索时,立马要想到使用这个模块 [python] view plaincopyprint? import bisect L = [1,3,3,6,8, ...

  10. Python查找算法之 -- 列表查找和二分查找

    一.列表查找:从列表中查找指定元素 输入:列表.待查找元素 输出:元素下标或未查找到元素 二.列表查找方式 顺序查找 : 从列表的第一个元素开始遍历,知道找到为止.时间复杂度O(n) 二分查找 :从有 ...

随机推荐

  1. 【matlab混沌理论】1.2.洛伦兹吸引子

    ​Lorenz洛伦兹吸引子定义洛伦兹函数组后,通过ode45函数求解此微分方程方程. input: % Lorenz函数的洛伦兹吸引子 % 2.定义模型参数 sigma = 10; beta = 8/ ...

  2. Vite4+Typescript+Vue3+Pinia 从零搭建(7) - request封装

    项目代码同步至码云 weiz-vue3-template 基于 axios 封装请求,支持多域名请求地址 安装 npm i axios 封装 utils 目录下新建 request 文件夹,并新建 i ...

  3. MongoDB副本集的搭建和管理(高可用)

    使得mongodb具备自动故障转移.高可用.读写分离. 副本集默认情况下读写都只是通过主库,副节点只是备份数据而已,但是可以设置副节点允许读操作,这样就可以做成读写分离. 使用pymongo的时候也可 ...

  4. Dart 3.2 更新盘点

    作者 / Kevin Moore 和 Michael Thomsen 我们隆重宣布推出 Dart 3.2,这一版本针对以下方面做出了改进: 新增了一项语言功能,可对私有 final 字段进行非空升级: ...

  5. WPF通用权限平台系统,正在研发中(基本于:VS2019 WPF+Devexpress21.2)

    WPF通用权限平台系统,正在研发中(基本于:VS2019 WPF+Devexpress21.2) 开发工具:VS2019 C# WPF 第三方工具:Devexpress21.2 数据库:SQLServ ...

  6. <Python全景系列-1> Hello World,1分钟配置好你的python环境

    <从此开始:1分钟配置好你的python环境> 欢迎来到我们的系列博客<Python360全景>!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题, ...

  7. 在线录屏-通过Web API接口轻松实现录屏

    在线录屏是指在互联网上进行屏幕录制的过程.它允许用户通过网络连接,将自己的屏幕活动记录下来,并可以在需要时进行播放.共享或存档.在线录屏常用于教育.培训.演示.游戏等场景,可以帮助用户展示操作步骤.解 ...

  8. Java 在Excel中添加筛选器并执行筛选

    以下内容介绍通过Java程序在Excel添加筛选器并执行筛选.程序需要使用Excel工具类库Free Spire.XLS for Java,本文中使用的是免费版,可在官网下载jar包,解压导入jar文 ...

  9. 容器、Docker、虚拟机,别再傻傻分不清

    摘要:容器技术起源于Linux,是一种内核虚拟化技术,提供轻量级的虚拟化,以便隔离进程和资源.尽管容器技术已经出现很久,却是随着Docker的出现而变得广为人知. 容器技术起源于Linux,是一种内核 ...

  10. 如何正确使用Python临时文件

    摘要:临时文件通常用来保存无法保存在内存中的数据,或者传递给必须从文件读取的外部程序.一般我们会在/tmp目录下生成唯一的文件名,但是安全的创建临时文件并不是那么简单,需要遵守许多规则. 1.前言 临 ...