C#查找算法2:插值查找
插值查找,有序表的一种查找方式。插值查找是根据查找关键字与查找表中最大最小记录关键字比较后的查找方法。插值查找基于二分查找,将查找点的选择改进为自适应选择,提高查找效率。
原理: (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:插值查找的更多相关文章
- Java中的查找算法之顺序查找(Sequential Search)
Java中的查找算法之顺序查找(Sequential Search) 神话丿小王子的博客主页 a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数 ...
- C语言查找算法之顺序查找、二分查找(折半查找)
C语言查找算法之顺序查找.二分查找(折半查找),最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 顺序查找 /*顺序查找 顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的 ...
- 数据结构与算法之PHP查找算法(二分查找)
二分查找又称折半查找,只对有序的数组有效. 优点是比较次数少,查找速度快,平均性能好,占用系统内存较少: 缺点是要求待查表为有序表,且插入删除困难. 因此,折半查找方法适用于不经常变动而查找频繁的有序 ...
- 数据结构与算法之PHP查找算法(顺序查找)
对于查找数据来说,最简单的方法就是从列表的第一个元素开始对列表元素逐个进行判断,直到找到了想要的结果,或者直到列表结尾也没有找到,这种方法称为顺序查找. 一.基本写法 顺序查找的实现很简单.只要从列表 ...
- python实现查找算法:二分查找法
二分查找算法也称折半查找,基本思想就是折半,和平时猜数字游戏一样,比如猜的数字时67,猜测范围是0-100,则会先猜测中间值50,结果小了,所以就会从50-100猜测,中间值为75,结果大了,又从50 ...
- Java查找算法之二分查找
二分查找是一种查询效率非常高的查找算法.又称折半查找. 一.算法思想 有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功. 一个情景:将表中间位置 ...
- 查找算法(顺序查找、二分法查找、二叉树查找、hash查找)
查找功能是数据处理的一个基本功能.数据查找并不复杂,但是如何实现数据又快又好地查找呢?前人在实践中积累的一些方法,值得我们好好学些一下.我们假定查找的数据唯一存在,数组中没有重复的数据存在. (1)顺 ...
- 查找算法:二分法查找及其python实现案例
承接上一篇:查找:顺序查找与二分法查找,将二分法更多详细的python实现解题写下笔记. 简单方法 ''' 二分法查找在列表中的用户输入值,返回index 三种情况跳出循环体: LR相邻 LR位置重合 ...
- python数组查找算法---bisect二分查找插入
1 实例 这个模块只有几个函数, 一旦决定使用二分搜索时,立马要想到使用这个模块 [python] view plaincopyprint? import bisect L = [1,3,3,6,8, ...
- Python查找算法之 -- 列表查找和二分查找
一.列表查找:从列表中查找指定元素 输入:列表.待查找元素 输出:元素下标或未查找到元素 二.列表查找方式 顺序查找 : 从列表的第一个元素开始遍历,知道找到为止.时间复杂度O(n) 二分查找 :从有 ...
随机推荐
- js上传多个文件到asp.net core,并实时转存到阿里云oss
有时候,为了追求便利性,我们可能会让前端直接将文件上传到阿里云OSS,然后将URL提交给ASP.NET.然而,这种做法意味着前端需要拥有OSS的访问密钥,而将密钥存放在前端,无疑增加了被破解的风险.因 ...
- 【论文阅读】HTTP 流量和恶意 URL 的异常检测
Part 1关于论文 基本信息 题目:HTTP 流量和恶意 URL 的异常检测 源码:sec2vec源代码 摘要 在本文中,我们将展示如何利用自然语言处理(NLP)中已知 的方法来检测 HTTP 请求 ...
- 搭建前端项目时出现了.../dist/index.mjs:128 if (!require.cache) { ^ ReferenceError: require is not defined...
具体报错如下: 修改node_modules/vite-plugin-mock/dist/index.mjs 加入如下内容 // 解决报错问题 import { createRequire } fro ...
- Semantic Kernel 正式发布 v1.0.1 版本
微软在2023年12月19日在博客上(Say hello to Semantic Kernel V1.0.1)发布了Semantic kernel的.NET 正式1.0.1版本.新版本提供了新的文档, ...
- 基于注解玩转excel导出导入-基于注解玩转excel导出导入
title: 基于注解玩转excel导出导入 date: 2021-05-01 15:55:13.53 updated: 2021-12-26 17:43:19.505 url: https://ww ...
- 从零玩转Yaip使用-cong-ling-wan-zhuan-yaip-shi-yong
title: 从零玩转Yaip使用 date: 2021-07-16 15:47:17.624 updated: 2021-12-26 17:43:12.255 url: https://www.yb ...
- Python——第三章:内置函数(上)
Python中的内置函数 基础数据类型相关(38) 和数字相关(14) 数字类型(4) bool--布尔型 int--整型 float--浮点型 complex--虚数 机制转换(3) bin--二进 ...
- Python——第二章:集合 Set
set集合,集合的特点是无序的 写法:s = {1,2,3} 但是如果内容是空的,它不是set集合,而是dict字典 s = {} print(type(s)) #输出结果 <class 'di ...
- Centos7——防火墙(Firewall)命令
centos防火墙根据系统大致有2种,一种是centos6时代的iptables:一种是centos7时代的firewalld: CentOS 7中防火墙是一个非常的强大的功能,在CentOS 6.5 ...
- GDAL从二进制数据流中构造数据集
目录 1. 概述 2. 实现 1. 概述 参看<从二进制数据流中构造GDAL可以读取的图像数据>这篇文章.这个问题的内涵在于,处理图像时都会将其读取成宽X高X波段的三维数组的内存Buffe ...