国王陛下万万岁

导航

 

难点:

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

定义三个变量,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摄氏度,比较冷。

posted on 2020-03-02 16:27  国王陛下万万岁  阅读(208)  评论(0编辑  收藏  举报