问题描述:
通过插值查找,查找一个数在给定数组中是否存在,若存在找到位置索引,不存在返回-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]);
来源:https://www.cnblogs.com/heibingtai/p/12630712.html