插值查找

懵懂的女人 提交于 2020-04-04 11:55:49

 

问题描述:

通过插值查找,查找一个数在给定数组中是否存在,若存在找到位置索引,不存在返回-1(给定数组中的数值都不相等)

 

算法实现:

privat int interpolationSearch(int[] arr, int lo, int hi, int key) {    if(lo > hi || arr[lo] > key || arr[hi] < key) {        return -1;    }    int mid = lo + (hi - lo) * ((key - arr[lo]) / (arr[key] - arr[lo]));    int midValue = arr[mid];    if(key > midValue) {        return interpolationSearch(arr, mid + 1, hi, key);    } else if(key < midValue) {        return interpolationSearch(arr, lo, mid - 1, key);    } else {        return mid;    }}

 

算法解析:

1.插值查找是对二分查找的优化,主要针对数据量较大&关键字分布比较均匀的查找表;

2.重点关注插值的计算公式的关键部分(key - arr[lo]) / (arr[hi] - arr[lo]);

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!