标签:arr right target 插值 mid int 算法 查找 left
插值查找算法
和二分查找类似。mid的计算方式不一样 mid= left + (right - left)*(target - arr[left])/(arr[right] - arr[left]);
注意事项:
1.对于数据量较大,关键字分布比较均匀的查找表来说,采用插值查找,速度较快。
2.关键字分布不均匀的情况下,该方法不一定比二分查找要好。
代码
package com.search;
public class InsertValueSearch {
public static void main(String[] args) {
// int[] arr = new int[100];
// for(int i=0;i<arr.length;i++){
// arr[i] = i+1;
// }
//用两个不同的数组来测试,一个是分布均匀的,一个是不均匀的。
int[] arr = {1,8,10,89,1000,1000,1000,1234};
int i = insertValueSearch(arr, 0, arr.length - 1, 89);
System.out.println(i);
}
//插值查找算法也需要数组是有序数组
public static int insertValueSearch(int[] arr,int left,int right,int target){
System.out.println("hello");//用来查看进行几次递归
if(left > right || arr[left]>target || arr[right]<target){
return -1;
}
int mid = left + (right - left)*(target - arr[left])/(arr[right] - arr[left]);
int midVal = arr[mid];
if (midVal > target){
return insertValueSearch(arr,left,mid-1,target);
}else if(midVal < target){
return insertValueSearch(arr,mid+1,right,target);
}else{
return mid;
}
}
}
标签:arr,right,target,插值,mid,int,算法,查找,left 来源: https://blog.csdn.net/qq_42582750/article/details/120994305
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。