【查找算法】插值搜索算法

问题描述

给定n个元素的均匀分布的数组中,找到给定的元素的位置。

啥叫均匀分布?最理想的状态就是,1,3,5,7,9。。。

可以根据均匀分布的特点,计算目标值的预估位置

执行步骤

根据均匀分布的特点,每次找到差不多逼近目标值的那个值,然后进行二分逼近。

代码实现 

class GFG {

	public static int interpolationSearch(int arr[], int lo,
										int hi, int x)
	{
		int pos;

		if (lo <= hi && x >= arr[lo] && x <= arr[hi]) {

			// 既然是均匀分布,那么根据均匀分布的公式计算预计值
			pos = lo
				+ (((x - arr[lo]) / (arr[hi] - arr[lo]))
					* (hi - lo));

			// 找到了
			if (arr[pos] == x)
				return pos;

			// 右侧搜索
			if (arr[pos] < x)
				return interpolationSearch(arr, pos + 1, hi,
										x);

			// 左侧搜索
			if (arr[pos] > x)
				return interpolationSearch(arr, lo, pos - 1,
										x);
		}
		return -1;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值