zoukankan      html  css  js  c++  java
  • 经典算法之二分查找法

    思想:

            二分查找:1.针对的是有序的元素(可以升序,可以降序)

                               2.每次都是在左边界和右边界中间的索引去查询,如果没找到就接着这样去查询,直到某一个边界

                               3.过滤掉边界问题,如果还没找到的话,那么提示要找的值在该数组中不存在

     public static int getValueByHalfSelect() {
            int findValue = 11;
            int findIndex = -1;
            //使用静态初始化的方式定义一个数组。
            int[] arr = {0,1,2,3,4,6};
            //因为最左边的索引和最右边的索引的位置是变化的,所以将其定义成变量
            int leftIndex = 0;
            int ringhtIndex = arr.length - 1;
            //当前的索引
            int currentIndex =  arr.length/2;
            //因为是直到找到才结束,while
            while(true) {
                if(arr[currentIndex] == findValue) {//找到了
                    findIndex = currentIndex;
                    //输出当前值的索引
                    System.out.println("您查询的值:"+findValue + "
    它的当前的索引是:"+currentIndex);
                    break;
                }else {
                    //意思就是:如果等于临界的时候,如果还没有找到此值的话,那么说明此值不存在,也就是需要"退出循环"然后提示"未找到该值"
                    if(currentIndex == 0 || currentIndex == arr.length - 1) {
                        break;
                    }
                    //未找到,然后判断该值与该数组中的数组进行比较
                    if(findValue > arr[currentIndex]) {// 4 > 2
                        //向右
                        leftIndex = currentIndex;// 0,1,2,3,4,5 11
                        currentIndex = leftIndex + (ringhtIndex - leftIndex + 1)/2;//不加1的最后一个值取不到。
                    }else if(findValue < arr[currentIndex]){
                        //向左
                        ringhtIndex = currentIndex;// 0,1,2,3,4,5
                        currentIndex = leftIndex + (ringhtIndex - leftIndex)/2;
                    }
                }
            }
            if(findIndex == -1) {
                System.out.println("该数组中未找到该值");
            }
            return currentIndex;
        }

    注意:在向右取值的时候,最右边的索引 - 最左边的索引 + 1;如果不加上1的话,那么最后一个就取不到

  • 相关阅读:
    iOS 成员变量,实例变量,属性变量的区别,联系
    iOS类别(category)不能添加成员变量但是可以添加属性的问题
    iOS缓存机制详解
    ios数据缓存方法
    仿360圆圈自动隐藏效果
    html 背景透明文字不透明
    netty
    关注网站
    关注URL
    DNS之XX记录
  • 原文地址:https://www.cnblogs.com/donghaibin/p/9057345.html
Copyright © 2011-2022 走看看