九种查找算法-插值查找
创始人
2024-05-20 02:55:14
0

插值查找

 

一、什么是插值查找

(1)插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找。

(2)二分查找中mid值是left和right所指序列下标的和的1/2即 mid = (left+right)/ 2。

(3)而插值查找的mid 值是通过公式计算得来由,由公式可以明显看出mid的值并非像二分那样为左右索引的中间位置。

(4)插值查找公式;3、int mid = low + (high - low) * (key - arr[low]) / (arr[high] - arr[low]) ;low表示左边索引left,high表示右边索引right. key 就是需要查找的值。

二、插值查找的特点

(1)查找的序列必须有序

(2)对于数据量大的以及关键字分布均匀的有序序列来说,插值查找的速度较快。

(3)对于分布不均匀的有序序列来说,该算法不一定比二分查找要好。

 

插值查找基于二分查找算法,将查找点的选择改进为自适应选择,可以提高查找效率。当然,差值查找也属于有序查找

算法思路

  1. 确定查找范围low=0,high=N-1,计算中项mid=low+(key-a[low])/(a[high]-a[low])*(high-low)。

  2. 若mid==x或low>=high,则结束查找;否则,向下继续。

  3. 若amidx,说明待查找的元素值只可能在比中项元素小的范围内,则把mid-1的值赋给higt,并重新计算mid,转去执行步骤2。

说明

  • 插值查找是基于折半查找进行了优化的查找方法。

  • 当表长较大,而关键字分布又比较均匀的查找表来说,插值查找算法的平均性能要比折半查找要好得多。

代码

#includeint array[10] = { 1, 4, 9, 16, 27, 31, 33, 35, 45, 64 };int InsertionSearch(int data)
{int low = 0;int high = 10 - 1;int mid = -1;int comparisons = 1;int index = -1;while(low <= high){printf("比较 %d 次\n" , comparisons );printf("low : %d, list[%d] = %d\n", low, low, array[low]);printf("high : %d, list[%d] = %d\n", high, high, array[high]);comparisons++;mid = low + (((double)(high - low) / (array[high] - array[low])) * (data - array[low]));printf("mid = %d\n",mid);// 没有找到if(array[mid] == data){index = mid;break;}else{if(array[mid] < data){low = mid + 1;}else{high = mid - 1;}}}printf("比较次数: %d\n", --comparisons);return index;
}int main()
{int location = InsertionSearch(27);  //测试代,查27,可以找到if(location != -1){printf("查找元素顺序为: %d\n" ,(location+1));}else{printf("没有查找到");}return 0;
}

 

相关内容

热门资讯

中咨工程公司以全过程咨询服务擦... 转自:新华丝路近年来,在“一带一路”倡议持续深化的背景下,乌兹别克斯坦奥林匹克城项目作为中乌两国重点...
求小说 现代都市 女主自己创业... 求小说 现代都市 女主自己创业 很厉害 最好女主会异能《丑丫头变身美女校花》《都市女帝》
特朗普计划7月4日与泽连斯基通... △美国总统特朗普(资料图)当地时间7月4日,总台记者从乌克兰方面获悉,美国总统特朗普已确认,他计划在...
德国发生长途汽车侧翻事故 至少... 转自:央视德国警方当地时间7月4日通报称,一辆从丹麦首都哥本哈根开往奥地利首都维也纳的长途汽车当天凌...
抖音:未满16周岁未成年人禁止... 转自:北京日报客户端7月4日,记者从抖音获悉,该平台启动“共建文明直播·2025暑期未成年人”专项行...
4日豆油下跌0.95%,最新持... Hehson期货 根据交易所数据,截至7月04日收盘主力合约豆油2509,涨跌-0.95%,成交量3...
北交所规模最大定增预案出炉:钟...   近日,锦波生物发布公告,公司拟向养生堂有限公司(以下简称 “养生堂”)定向发行股票募资20亿元,...
水螅号称是“能够永生的生物”,... 水螅号称是“能够永生的生物”,水螅为何能做到永生呢?水螅是无脊椎动物,在体内有种物质,具有逃脱朽迈过...
“1+1+1>3”!深莞惠联合...   近日,深圳、东莞、惠州三市生态环境部门联合印发《深圳都市圈生态环境保护规划(2025—2030年...
分宜九银村镇银行被罚9万元:提...   7月4日金融一线消息,中国人民银行新余市分行行政处罚信息公开表显示,分宜九银村镇银行股份有限公司...