Java二分查找

Java中有自带Arrays 工具类

Arrays.sort(data);

int index = Arrays.binarySearch(data, 3);

 

直接调用函数即可。index即为数组下标值。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
public class er{
    public static void main(String[] args){
        int[] arr = {0,1,2,3,4,5,6,7,8,9};
        int a = 9;
        //int m = BinSearch(arr,0,arr.length-1,a);
        int m = BinSearch(arr,arr.length,a);
        System.out.println(m);
    }
    /*
    //递归
    static int BinSearch(int Array[],int low,int high,int key) 
    
        if (low<=high) 
        {
            int mid = (low+high)/2; 
            if(key == Array[mid]) 
                return mid;
            else if(key<Array[mid]) 
                //移动low和high
                return BinSearch(Array,low,mid-1,key);
            else if(key>Array[mid])
                return BinSearch(Array,mid+1,high,key);
        
        return -1; 
    }
    */
    /*
    //递归
    public static int BinSearch(int[] arr,int begin,int end,int a){
        if (begin<=end)
        {
            int mid = (begin+end)/2;
            if (arr[mid] == a){
            //System.out.println("1");
            return mid;
            }
            else if (arr[mid] < a){
                return BinSearch(arr,mid+1,end,a);
                //System.out.println("2 "+mid+" "+end);
            }
            else if (arr[mid] > a){
                return BinSearch(arr,begin,mid-1,a);
                //System.out.println("3"+begin+" "+mid);
            }
        }
         
        return -1;
    }
    */
 
    //普通循环
    public static int BinSearch(int[] a, int len, int goal)
    {
        int low = 0;
        int high = len -1;
        while (low <= high)
        {
            int middle = (high - low) / 2 + low; // 直接使用(high + low) / 2 可能导致溢出
            if (a[middle] == goal)
                return middle;
            //在左半边
            else if (a[middle] > goal)
                high = middle - 1;
            //在右半边
            else
                low = middle + 1;
        }
        //没找到
        return -1;
    }
}

  

posted @   小小暮雨  阅读(1129)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示