查找--插值查找

插值查找是在二分查找基础上的优化,对于均匀分布的大数据表,其平均性能优于二分查找。本文介绍了插值查找的概念,并提供了C、C++、C#三种语言的实现版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二分查找每次都是从中间开始,没有考虑数据之间的关系,这是一种比较低效的实现方法,插值查找就是在二分查找的基础上,改进的中间记录的选取。

虽然插值查找的时间复杂度月二分查找相同,都是 O(logn),但是对于表比较大,而关键字分布比较均匀的查找,插值算法的平均性能比折半查找要好很多。反之,线性表中记录分布不均匀,用插值查找未必是很好的选择。


C 版

// interpolation search c.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

int interpolation_search(int* arr, int length, int target)
{
	int first = 0 ;
	int last = length - 1 ;
	while (first <= last)
	{
		int mid = first + 1 + (target - arr[first]) * (last - first) / (arr[last] - arr[first]);
		if (arr[mid] < target)
		{
			first = mid ;
		}
		else if (arr[mid] > target)
		{
			last = mid ;
		}
		else
		{
			return mid ;
		}
	}
	return 0 ;
}

int _tmain(int argc, _TCHAR* argv[])
{
	int arr[] = {0, 1, 16, 24, 35, 47, 59, 62, 73, 88, 99};
	int length = 11 ;

	int result = interpolation_search(arr, length, 16);

	return 0;
}

C++ 版

// interpolation sea
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值