插值查找

前提:有序数组

数组arr={1,2,3,...100}

假设查找1,使用二分查找的话,我们需要多少次递归,才能找到1

使用插值查找算法

int mid=left+(right-left)*(findVal-arr[left])/(arr[right]-arr[left])      //left和right代表索引

注意:对于数据量较大,关键字(数组元素)分布比较均匀的查找表来说,采用插值查找,速度较快

关键字分布不均匀的情况下,该方法不一定比折半查找好

//插值查找
public class InsertValueSearch {
public static void main(String[] args) {
int[]arr=new int[100];
for (int i = 0; i < 100; i++) {
arr[i]=i+1;
}
int index=insertValueSearch(arr,0,arr.length-1,78);
System.out.println("index="+index);
}
public static int insertValueSearch(int[]arr,int left,int right,int findVal){
//注意
if (left>right||findVal<arr[0]||findVal>arr[arr.length-1]){
return -1;
}
//求出mid
int mid=left+(right-left)*(findVal-arr[left])/(arr[right]-arr[left]);
return mid;
}
}

 

posted @   开源遗迹  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示