zoukankan      html  css  js  c++  java
  • 二分法查找

     /**
         * 查找数组的元素(二分法)  有循序的数组元素
         *
         * @param arr  数组
         * @param num1 查找的元素
         * @return 返回查找元素出现的位置
         */
        public static int looks(int[] arr, int num1) {
    
            int left=0;  左边索引
            int right=arr.length-1;  右边索引
            int no=-1;  如果没有找到返回 -1
            while (left<right){  左边小于右边
                int min=(right+left)/2;  取中间索引值
                if(arr[min]==num1){    找到目标元素
                    return min;        返回
                }else if(arr[min]>num1){  如果目标元素小于中间索引位置元素  就把右边索引收缩到中间位置(并-1)
                    right=min-1;      
                }else{            如果目标元素大于中间索引位置元素  就把左边索引收缩到中间位置(并+1)
                    left=min+1;
                }
            }
            return no;    
        }

     二分法实战:::

      自己定义一个目标值,利用Random生成随机数,用自己的目标值找到随机数。。。。。

        

    
    
    
    
    /**
    * random
    * 将 随机数不参与运算,如(25 < 45 < 50,只参与比较,从而找到随机数
    *
    * @return
    */
    public static void rendo2(int target) {    目标数设置为 1(因为目标数如果太大, /2 也回不到(mix < ran < target)条件 )
    Random randoms = new Random();
    int ran = (byte) randoms.nextInt();  生成随机数
    System.out.println("随机数是:"+ran);
    int count=0;              计数器循环多少次
    while (ran != target) {    随机数不等于目标值就循环
    count++;
    if (ran > 0) {      随机数如果大于0
    if (ran > target) {    如果随机数大于目标数就 让目标数不断 *2 直到目标数大于随机数
    target = target * 2;  
    }else if(ran<target){    目标数大于随机数
    int mix=target/2;    再将目标数 /2 这样就得到了 mix < ran < target
    binaryseek(mix,ran,target,count);      进入二分法,肯定可以找到 随机数
    return;
    }
    }else{        随机数如果小于0    
    if(ran<target){    和正数相反
    target=target*2;
    }else if(ran>target){  和正数相反
    int mixx=target/2;
    binaryseek(mixx,ran,target,count);
    return;
    }
    }
    }
    }
     
    
    
    /**
    * 二分查找方法
    * @return
    */
    public static int binaryseek(int mix,int key,int max,int count){

    while (true){
    count++;
    int temp=(mix+max)/2;
    if(temp==key){
    System.out.println("找到"+temp);
    System.out.println("计数器"+count);
    return temp;
    }else if(temp<key){
    mix=temp+1;
    }else {
    max=temp-1;
    }
    }
    }
     
  • 相关阅读:
    Python爬虫基础——re模块的提取、匹配和替换
    Python爬虫基础——正则表达式
    Python爬虫基础——HTML、CSS、JavaScript、JQuery网页前端技术
    Python——面向对象(类)的基础疑难点
    简单易懂的ftp脚本自动登录教程
    如何完成述职报告或年终总结PPT
    nmon脚本——对Linux服务器的监控
    记——第一次服务器被挖矿
    vsftpd超实用技巧详解
    MySQL、Oracle、SqlServer的区别
  • 原文地址:https://www.cnblogs.com/axu521/p/10475721.html
Copyright © 2011-2022 走看看