二分查找

    //数组二分查找法
    public static void main(String[] args) {
        int[] arr = new int[1024];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = i;
        }
        System.out.println(whileTwo(333,arr));
        System.out.println(doWhileFindTwo(552,arr));
        System.out.println(forFindTwo(998,arr));
    }

    public static int whileTwo(int find, int... arr) {
        //假定最大值
        int max = arr.length - 1;
        //假定最小值
        int min = 0;
        int mid = 0;
        //记录次数
        int conut = 0;
        while (arr[mid] != find) {
            conut++;
            if (find > arr[mid])
                min = mid + 1;
            if (find < arr[mid])
                max = mid - 1;
            mid = (max + min) / 2;
        }
        System.out.println(conut+"次数!");
        return arr[mid];
    }

    public static int doWhileFindTwo(int find,int ... arr){
        int max=arr.length-1;
        int min=0;
        int mid=0;
        int count=0;
        do{
            count++;
            if (find>arr[mid])
                min=mid+1;
            if (find<arr[mid])
                max=mid-1;
            mid=(max+min)/2;
        }while(arr[mid]!=find);
        System.out.println(count+"次数!");
        return arr[mid];
    }

    public static int forFindTwo(int find,int ... arr){
        int max=arr.length-1;
        int min=0;
        int mid=0;
        int count=0;
        for (int i = 0; i < arr.length; i++) {
            count++;
            if (find>arr[mid])
                min=mid+1;
            if (find<arr[mid])
                max=mid-1;
            mid=(max+min)/2;
            if (find==arr[mid]) break;
        }

        System.out.println(count+"次数");
        return arr[mid];
    }

 

posted @ 2020-05-21 15:15  老纳尼桑人  阅读(114)  评论(0)    收藏  举报