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

    public class Test {
        public static void main(String[] args) {
            int[]a={1,5,8,9,11,12,56,89};
            int i = binarySearch(a, 56);
            System.out.println(i);
    
        }
    
        /**
         * 又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置
           的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,
           则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。
         * @param arr
         * @param b
         * @return
         */
        public static int binarySearch(int[]arr,int b){
            if(null==arr || arr.length==0){
                return -1;
            }
            int leftIndex=0;//查找区间的左边索引
            int rightIndex=arr.length-1;//查找区间的右边索引
            int mid=0;//区间的中间索引
            while (leftIndex<=rightIndex){ //当左边的索引小于等于右边的索引时,可以继续取中间值
                mid=(leftIndex+rightIndex)/2;//中间索引值
                if(arr[mid]==b){ //如果中间索引所在的数据与需要查找的数据相等,则返回索引值
                    return mid;
                }
    
                if(arr[mid]>b){//b在左
                    rightIndex=mid-1;//如果需要查找的值在左边区间,则右边的索引要改为中间索引mid,又因为上一步知道arr[mid]!=b,所以要用mid-1作为右区间索引
                }else {
                    leftIndex=mid+1; //b在右边,同理所以mid+1
                }
            }
            return -1;//找不到时
        }
    }
  • 相关阅读:
    【转】使用python编写网络通信程序
    【转】linux下的单线程
    【转】使用python进行多线程编程
    mysql数据库安装、启动及权限设置
    【转】Linux下的多线程编程背景知识
    开关电源使用
    ubi实际使用
    xshell快捷键
    Nandflash镜像尾部不应填充0xFF
    CRC校验
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/10894706.html
Copyright © 2011-2022 走看看