美文网首页
一遍文章搞定插值查找-Java版

一遍文章搞定插值查找-Java版

作者: shengjk1 | 来源:发表于2020-04-16 22:37 被阅读0次
    1. 插值查找

    与二分查找基本相似,就是 mid 的值不一样


    image
    1. 代码演示
    package xmht.datastructuresandalgorithms.algorithms.search;
    
    /**
     * @author shengjk1
     * @date 2020/4/16
     */
    public class InsertValueSearch {
        public static void main(String[] args) {
    //      int[] arr = {1, 1, 1, 1, 1, 1};
    //      int[] arr = {1, 2, 3, 4, 5, 6, 7};
            int[] arr = {1, 12, 30, 400, 5000, 60000, 700000};
            int i = insertValueSearch(arr, 0, arr.length - 1, 400);
            System.out.println(i);
        }
        
        public static int insertValueSearch(int[] arr, int left, int right, int findVal) {
            System.out.println("==");
            if (left > right || findVal < arr[0] || findVal > arr[arr.length - 1]) {
                return -1;
            }
            
            int mid = 0;
            if ((arr[right] - arr[left]) != 0) {
                mid = left + (right - left) * (findVal - arr[left]) / (arr[right] - arr[left]);
            } else {
                mid = left;
            }
            
            int midVal = arr[mid];
            if (findVal > midVal) {
                return insertValueSearch(arr, mid + 1, right, findVal);
            } else if (findVal < midVal) {
                return insertValueSearch(arr, left, mid - 1, findVal);
            } else {
                return mid;
            }
            
        }
    }
    
    1. 适用场景

    1.对于数据量较大,关键字分布均匀的查找来说,插值查找要比二分查找快。
    2.关键字分布不均匀的情况下,插值查找不一定比二分查找快甚至可能还慢。

    相关文章

      网友评论

          本文标题:一遍文章搞定插值查找-Java版

          本文链接:https://www.haomeiwen.com/subject/uovjvhtx.html