• 查找-->二分查找和插值查找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;
            }
        }
    
    }
  • 相关阅读:
    nginx 反向代理 apache 服务
    IIS 设置404页面 显示系统找不到指定的文件
    centos6.6 下 安装 nginx
    sql优化建议
    php的静态化
    vsftp上传文件出现553 Could not create file
    php安装libevent扩展
    discuz回贴通知插件实现-显示用户状态设置
    discuz回贴通知插件实现-插件的多语言
    discuz回贴通知插件实现-插件后台管理配置
  • 原文地址:https://www.cnblogs.com/cai170221/p/13738342.html
Copyright © 2020-2023  润新知