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

    }

    }

    结果:

     

  • 相关阅读:
    bzoj4734
    51nod1056
    51nod1048
    51nod1248
    51nod1044
    51nod1132
    51nod1146
    51nod1226
    Spring Boot: Jdbc javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
    sqlserver命令创建数据库和表 demo
  • 原文地址:https://www.cnblogs.com/juddy/p/13779416.html
Copyright © 2011-2022 走看看