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;
    }

    }

    }

    结果:

     

  • 相关阅读:
    20210815 图论模拟赛
    20210813 杂项の模拟赛
    20210812dp模拟赛
    20210811数据结构
    html问题记录20180514
    Oracle导出表空间的创建语句、导入、导出dmp文件
    浮动子div撑开父div的几种方法、给select赋值、zoom样式的含义、实现select下拉框readonly
    Fidder教程
    JQuery插件的写法和规范
    box-sizing position calc() @media
  • 原文地址:https://www.cnblogs.com/juddy/p/13779416.html
Copyright © 2011-2022 走看看