一、插值查找算法介绍
- 插值查找算法类似于二分查找,必须是有序列表,不同的是插值查找每次从自适应mid(即获取数组中间的索引)处开始查找。
- 将二分查找(即折半查找)中的求mid 索引(即获取数组中间的索引)的公式:int mid=(left+right)/2 改成 int mid = low + (high - low) * (key - arr[low]) / (arr[high] - arr[low]) 。
- 代码和二分查找(即折半查找)类似,唯独mid的计算方式发生改变。
- 对于数据量较大,关键字分布比较均匀的查找表来说,采用插值查找, 速度较快.
- 关键字分布不均匀的情况下,插值查找算法不一定比二分查找算法(折半查找算法)要好
假如我们需要查找的值分别 为1和100
- 使用二分查找算法需要多次递归,才能找到 1和100
- 使用插值查找算法查找值为1时,利用 int mid = left + (right – left) * (findVal – arr[left]) / (arr[right] – arr[left])公式,int mid = 0 + (99 - 0) * (1 - 1)/ (100 - 1) = 0 + 99 * 0 / 99 = 0 ,一次查找就可找到
- 使用插值查找算法查找值为100时,利用 int mid = left + (right – left) * (findVal – arr[left]) / (arr[right] – arr[left])公式,int mid = 0 + (99 - 0) * (100 - 1)/ (100 - 1) = 0 + 99 * 99 / 99 = 99,一次查找就可找到
1、代码
package com.rf.springboot01.dataStructure.search;
/**
* @description: 插值查找算法示例
* @author: xiaozhi
* @create: 2020-08-18 22:44
*/
public class InsertSearch {
public static void main(String[] args) {
//生成一个1到100的有序数组
int[] arr=new int[100];
for(int i=0;iright || findValuearr[arr.length-1]){
return -1;
}
// 求出mid即中间位置索引, 自适应
int mid=left + (right - left) * (findValue - arr[left]) / (arr[right] - arr[left]);
int midValue=arr[mid];//中间位置索引的值
if(findValue>midValue){//向右递归
return insertSearch(arr,mid+1,right,findValue);
}else if(findValue
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?