JavaSE基础50题:27(数组练习)二分查找

概述

给定一个有序整数数组,实现二分查找。
二分查找的前提:必须是有序的数组!!

方法具体实现

如找数字5,定义L、R、M,其中M是L和R的中间位置,即(L+R) / 2 的位置。
如下图所示:
① L为0,R为4,此时M为2,2位置上的数字是3,3<5;
② 因为 3<5,所以,L=M+1的位置,R不变,此时M为 int (3+4)/2 = 3,3位置的数字为4,4<5;
③因为 4<5,所以,L=M+1的位置,R不变,此时M为4,4位置上的数字为5,故找到数字5.
JavaSE基础50题:27(数组练习)二分查找_第1张图片

代码

public class P27 {
    public static int func(int[] array,int num) {
        int left = 0;
        int rigth = array.length - 1;
        while (left <= rigth){ 
        //当left<=rigth时,进入循环,否则输出-1;
        //即你想要找的数组找到最后没找到,说明这个数组中没有你要找的数字,输出-1作提示。
            int mid = (left + rigth) / 2;
            if (num > array[mid]){
                left = mid + 1;
            }else if (num < array[mid]) {
                rigth = mid - 1;

            }else {
                return mid;
            }
        }
        return -1;
        }

    public static void main(String[] args) {
        int[] array = {11,22,33,44,55,66,77,88,99};
        int a = func(array,99);
        int b = func(array,2);
        
        System.out.println(a);
        System.out.println(b);
    }
}

//输出结果
8
-1

如果数组是无序的,就需要用Arrays.sort()方法先排个序,最终输出的位置是排完序后的位置。

    public static void main(String[] args) {
       int[] array2 = {2,5,6,3,8,4,1};
        Arrays.sort(array2); //此时的顺序为{1,2,3,4,5,6,8}
        System.out.println(func(array2, 1));
        System.out.println(func(array2,5));
    }

//输出结果
0
4

你可能感兴趣的:(Java题库,java,算法,数据结构,开发语言,学习方法,python)