zoukankan      html  css  js  c++  java
  • 查找-->二分查找和插值查找java实现

    package com.cai.math;
    
    /**
     *目标:实现二分查找 和 插值查找
     * 前提:两种查找都需要查找对象是一个有序的数组
     */
    public class BinarySearch {
        public static void main(String[] args) {
            int[] arr = {1,2,3,4,5,6,7,8,9};
    
            System.out.println(search2(arr,0,8,5));
        }
    
        /**
         * 利用递归的方法来查到所需的值
         *  二分查找(分治算法)
         *  前提:是一个有序的数组
         *  思想:把数组对分成两个部分,锁定部分,直到找到具体的值
         * @param arr 所查找的数组
         * @param low 数组低角标
         * @param high 数组高角标
         * @param value 需要查找的值
         * @return 如果存在所找数值,返回对应得下角标值,否则返回-1
         */
        public static int search(int[] arr,int low,int high,int value){
            if(low>high){
                return -1;
            }
            int mid = (low+high)/2;
            if(value>arr[mid]){
                return search(arr,mid+1,high,value);
            }else if(value>arr[mid]){
                return search(arr,low,mid-1,value);
            }else{
                return mid;
            }
        }
    
        /**
         * 插值查找
         * 主要区别与二分查找的时 中间值的取值
         * (备注:value-->所需查找的值)
         * mid = low +(high - low)*(value-arr[low])/(arr[high]-arr[low])
         * @param arr
         * @param low
         * @param high
         * @param value
         * @return
         */
        public static int search2(int[] arr,int low,int high,int value){
            //注意:arr[low]>value || arr[high]<value  必须需要,否则我们得到的mid可能越界
            if(low>high || arr[low]>value || arr[high]<value){
                return -1;
            }
            int mid = low +(high - low)*(value-arr[low])/(arr[high]-arr[low]);
            if(value>arr[mid]){
                return search2(arr,mid+1,high,value);
            }else if(value>arr[mid]){
                return search2(arr,low,mid-1,value);
            }else{
                return mid;
            }
        }
    
    }
  • 相关阅读:
    Reference Counting GC (Part two :Partial Mark & Sweep)
    Reference Counting GC (Part one)
    Union File System
    Linux Cgroups
    Mark Sweep GC
    取模运算
    负数取模怎么算
    牛客【2021寒假集训营第一场】J-一群小青蛙呱蹦呱蹦呱
    记codeforces一个简单模拟题
    筛法求素数
  • 原文地址:https://www.cnblogs.com/cai170221/p/13738342.html
Copyright © 2011-2022 走看看