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

    插值查找的原理介绍

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

    2.折半查找中的求mid索引的公式,low表示最左边索引,high表示右边索引

    mid=(low+high)/2=low+(high-low)/2------->mid=low+(key-a[low])(high-low)/(a[high]-a[low])

    3.mid=low+(high-low)*(key-arr[low])/(arr[high]-arr[low])//插值索引

    插值查找注意事项

    1.对于数据量较大,关键字分布比较均匀的查找表来说,采用插值查找速度比较快

    2.关键字不均匀的情况下,查找速度不一定比二分查找好

    代码:

    package com.gcy.searcch;
    /**
    * 插值查找算法:
    * 数组必须有序
    * @author Administrator
    *
    */
    public class InsertValueSearch {

    public static void main(String[] args) {
    int [] arr=new int[100];
    for(int i=1;i<100;i++) {
    arr[i]=i+1;
    }
    int s=insertValueSearch(arr, 0, arr.length-1, 100);
    System.out.println("s="+s);

    }
    /**
    * 插值查找
    * @param arr
    * @param left
    * @param right
    * @param val
    * @return
    */
    public static int insertValueSearch(int [] arr,int left,int right,int val) {
    if(left>right || val<arr[0] || val>arr[arr.length-1]) {
    return -1;
    }
    int mid=left+(right-left)*(val-arr[left])/(arr[right]-arr[left]);
    int midVal=arr[mid];
    if(val>midVal) {//向右边进行查找
    return insertValueSearch(arr, mid+1, right, midVal);
    }else if(val<midVal) {//向左边进行查找
    return insertValueSearch(arr, left, mid-1, midVal);
    }else {
    return mid;
    }

    }

    }

    结果:

     

  • 相关阅读:
    Linux下运行当前目录需要加./的原因
    Linux mint界面过小无法安装(解决方法)
    哈工大机考:数组逆置
    哈工大机考:字符串内排序
    哈工大机考:求最大值
    八皇后问题的简单分析
    哈工大机考:字符串去特定字符
    哈工大机考:计算两个矩阵的乘积
    iOS 字号转换问题
    iOS 十六进制的颜色值转换为UIColor
  • 原文地址:https://www.cnblogs.com/juddy/p/13779416.html
Copyright © 2011-2022 走看看