zoukankan      html  css  js  c++  java
  • Java二分查找(折半查找)

    难点:

    查找之前必须把数组排序,从大到小或从小到大都可以,不排序没法查找。

    定义三个变量,min代表数组的开始脚标;max代表数组的结束角标,mid代表数组的中间角标

    如果要查找的数大于数组Array[mid],则把min的值设置为mid+1;

    如果要查找的数小于数组Array[mid],则把min的值设置为max-1;

    如果要查找的数等于数组Array[mid],则把角标mid返回;

    import org.junit.Test;
    
    import java.util.Arrays;
    
    public class Demo {
    
        @Test
        public void test() {
            int[] arr = {4,1,25,11,16,10,21,8};
            Arrays.sort(arr);
    
            System.out.println(Arrays.toString(arr));
           int index = binarySearch(arr,19);
            System.out.println(index);
        }
    
        public int binarySearch(int[] arr,int key) {
            //定义三个指针变量。
            int min = 0;
            int max = arr.length - 1;
            int mid = 0;
            //循环折半,条件, min<=max
            while(min <= max) {
                //公式,计算中间索引
                mid = (min+max)/2;
                //让被找元素和中间索引元素进行比较
                if(key>arr[mid]) {
                    min = mid +1;
                }else if(key <arr[mid]) {
                    max = mid -1;
                }else {
                    //找到元素,返回元素索引
                    return mid;
                }
            }
            return -1;
        }
    }

    详情参考:

    https://www.cnblogs.com/yinzhengjie/p/8878221.html

    后记:

    2020年3月2日 星期一 农历2020年二月初九 上海 晴 气温14.3摄氏度,比较冷。

  • 相关阅读:
    字符编码解码
    综合练习[购物车]
    for 循环实例
    数据类型
    字符串格式化输出
    集成开发环境
    while循环实例
    赋值运算符、逻辑运算符、表达式
    if,else语句猜最大值
    计算今天和今天的上一月的日期
  • 原文地址:https://www.cnblogs.com/majestyking/p/12396317.html
Copyright © 2011-2022 走看看