zoukankan      html  css  js  c++  java
  • 插入查找

    插入查找

    插值查找原理介绍 :

    插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找。

    将折半查找中的求mid 索引的公式 , low 表示左边索引left, high表示右边索引right.
    key 就是前面我们讲的 要查找的值

    二分查找中的经过变换1595218348224

    也就是说我们的mid每次都是折中的取,但是对于一些均匀分布的有序表,这样做感觉有些费时,比如找字典的时候,找a这个字母,我们肯定不会从中间开始,而是偏向于字典前面一些开始。

    总之相当于

    int mid = left + (right – left) * (findVal – arr[left]) / (arr[right] – arr[left])

      public static ArrayList<?> insertionSearch(int[] arr, int target) {
    
            int left = 0;
            int right = arr.length - 1;
            ArrayList<Integer> integers = new ArrayList<>();
    
            while (left < right) {
                int mid =left+ (right -left) *(target-arr[left])/(arr[right]-arr[left]);
                if (arr[mid] < target) {
                    left=mid;
                }else if (arr[mid]>target){
                    right=mid;
    
                }else {
    
                    int i=mid-1;
                    int j=mid+1;
                    while (arr[i]==target){
                        integers.add(i--);
                    }
                    integers.add(mid);
                    while (arr[j]==target){
                        integers.add(j++);
                    }
    
                    return integers;
                }
            }
            return integers;
        }
    
    
  • 相关阅读:
    助教小结4
    第二次作业
    助教小结5
    助教小结3
    work3
    助教小结1
    课后第一次作业
    助教小结2
    第一次团队作业
    悟透 JavaScript
  • 原文地址:https://www.cnblogs.com/huangshen/p/13345588.html
Copyright © 2011-2022 走看看