二分法查找(详解)

一共三种方案

package com.***.test;

public class BinarySearch1 {
    /**
     * 相同数时返回右边查到的数
     */
    public static int binarySearchRight(int [] arr,int target){
        int low=0;
        int high=arr.length;
        while (low < high){
            int mid=(low+high)/2;
            if(target < arr[mid])
                high--;
            else
                low++;
        }
        if(arr[high-1]==target)
            return high-1;
        else
            return -1;
    }
    /**
     * 相同数时返回左边查到的数
     */
    public static int binarySearchLeft(int [] arr,int target){
        int low=0;
        int high=arr.length;
        while (low < high){
            int mid=(low+high)/2;
            if(target <= arr[mid])
                high--;
            else
                low++;
        }
        if(arr[high]==target)
            return high;
        else
            return -1;
    }

    /**
     *找的直接返回
     */
    public static int binarySearch(int [] arr,int target){
        int low=0;
        int high=arr.length;
        while (low < high){
            int mid=(low+high)/2;
            if(target == arr[mid])
                return mid;
            else if (target <arr[mid])
                high--;
            else
                low++;
        }
        return -1;
    }
    public static void main(String[] args) {
        int [] arr={1,2,2,5,5,8,9,12};
        System.out.println(binarySearchRight(arr,10));
        System.out.println(binarySearchLeft(arr,10));
        System.out.println(binarySearch(arr,10));
    }
}

猜你喜欢

转载自blog.csdn.net/zsq12138/article/details/78753618
今日推荐