24h購物| | PChome| 登入
2012-06-20 12:51:12| 人氣2,679| 回應0 | 上一篇 | 下一篇

[JAVA][考題] Binary Search 遞迴版本

推薦 0 收藏 0 轉貼0 訂閱站台

教授考了這麼一題, 他沒有明確告訴我們陣列中的值是已經排好的 !
沒有 sort 過, 可不能做的, 而且並沒有告訴我們函數的參數, 因此是自由發揮,
不過我覺得課本上的寫法很囉唆, 原因在於, 如果 return 的話,
其實後面就不加上 else if 了

由於 競賽的時候, 有人簡寫成 bsearch, 那我也來試試 !



import java.util.Arrays;


public class BSearch {
    public static int bsearch(int[] arr, int l, int r, int key) {
        if(l > r)
            return -1;
        int m = (l+r)/2;
        if(arr[m] == key)
            return m;
        if(arr[m] > key)
            return bsearch(arr, l, m-1, key);
        else
            return bsearch(arr, m+1, r, key);
    }
    public static void main(String[] args) {
        int[] arr = new int[10];
        for(int i = 0; i < 10; i++) {
            arr[i] = (int)(Math.random()*100);
        }
        Arrays.sort(arr);
        for(int e : arr) {
            System.out.print(e + ", ");
        }
        System.out.println("");
        for(int e : arr) {
            int idx = bsearch(arr, 0, arr.length, e);
            System.out.print(e + " in arr[" + idx + "]\n");
        }
        int idx = bsearch(arr, 0, arr.length, -1);
        System.out.print(-1 + " in arr[" + idx + "]\n");
    }
}

台長: Morris
人氣(2,679) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: [學習]Java |
此分類下一篇:[C++][OOP] Lab4 仿作練習
此分類上一篇:[JAVA][作業] Lab10 Swing 視窗設計

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文