插值查找(JAVA实现)

本文深入探讨了插值查找算法的原理与实现,对比二分查找,插值查找通过自适应mid公式提高查找效率,适用于均匀分布的数据集。文章详细解释了算法的计算过程,并提供了完整的Java代码实现。

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

原理:
1、插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找
2、将折半查找中的求mid公式修改,low表示左边索引left,high表示右边索引right,findVal表示查找值
(1)二分法:
mid=(low+high)/2=low+(high-low)/2
(2)自适应(可以理解为一条线上的占比)
mid=low+(findVal-arr[low])*(arr[high]-arr[low])/(high-low);

代码实现:

public class insertValSearch {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		//定义一个测试数组
		int[] arr= {1,8,10,66,89,120,145,1000,1024};
		int findVal=66;
		System.out.println(Search(arr, 0, arr.length-1, findVal));
	}
	
	public static int Search(int[] arr,int left,int right,int findVal) {
		System.out.println("算法被调用了!");
		if(left>right || findVal>arr[arr.length-1] || findVal<arr[0]) {
			return -1;
		}
		
		int mid=left+(right-left)*(findVal-arr[left])/(arr[right]-arr[left]);  //中间索引
		int midVal=arr[mid];
		if(findVal>midVal) {  //要查找的值大于中间值
			return Search(arr, mid+1,right , findVal);  //往右边二分查找
		}else if(findVal<midVal) {  //要查找的值小于中间值
			return Search(arr, left, mid, findVal);    //往左边二分查找
		}else {         //找到了值
			return mid;
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值