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

    二分法查找针对的是对有序的数组。特点:效率很高。

    class Demo6{
        
        public static void main(String[] args){
            //先定义一个有序数组
            int[] array = {21, 34, 56, 78, 79 ,83, 85, 90};
            int index = findIndex(array,83);
            System.out.println(index);
            
        }
            
            
            //定义一个方法可以进行二分法查找
            public static int findIndex(int[] array, int num){
                //先找出最小下标,最大下标和最大下标
                int minIndex = 0;
                int maxIndex = array.length-1;
                int midIndex = (array.length-1)/2;
                //使用条件判断,判断想要找到的数num是否等于数组此时的中间数
                while(num != array[midIndex]){
                    if(num > array[midIndex]){
                    //如果num > array[midIndex]时,执行该语句
                    //更新最小下标
                    minIndex = midIndex + 1;
                    //更新中间下标
                    midIndex = (maxIndex + minIndex)/2;
                }else{
                    //如果num < array[midIndex]时,执行该语句
                    //更新最大下标
                    maxIndex = midIndex - 1;
                    //更新中间下标
                    midIndex = (minIndex + maxIndex)/2;
                    }
                }
                return midIndex;
            
        }
            
            
    }

    老师的代码如下:

    class Demo16{
        
        /**
         * 求出数组的最大值
           
           
         
         */
        public static void main(String[] args){
            //定义一个数组
            int [] array = {4,6,7,8,9,23,55,67,89,99,615};
            //查找55的索引
            int index = findIndexBinary(array, 615);
            System.out.println("索引是:"+index);
            
        }
        
        /**
         *二分法查找
         */
        public static int findIndexBinary(int [] array, int a){
            //最小索引
            int minIndex = 0;
            //最大索引
            int maxIndex = array.length - 1;
            //中间索引
            int midIndex = (minIndex + maxIndex)/2;
            
            while(a != array[midIndex]){
                //如果a大于中间值
                if(a > array[midIndex]){
                    //更新最小索引
                    minIndex = midIndex + 1;
                }else{
                    //更新最大索引
                    maxIndex = midIndex - 1;
                }
                //更新中间索引
                midIndex = (minIndex + maxIndex)/2;
            }
            //返回目标索引
            return midIndex;
            
        }
        
        
        
    }
  • 相关阅读:
    hero
    今年暑假不AC
    Who's in the Middle
    A Simple Problem with Integers
    I hate it
    敌兵布阵
    Ordering Tasks
    Points on Cycle
    食物链
    c++ 14.0下载地址
  • 原文地址:https://www.cnblogs.com/chenttc/p/7726420.html
Copyright © 2011-2022 走看看