二分法查找(详解)

来源:互联网 发布:未闻花名但知花香出处 编辑:程序博客网 时间:2024/05/29 04:51

一共三种方案

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));    }}
原创粉丝点击