二分查找法

用循環實現:

public static int binarySearch(Integer[] srcArray, int des) {
    int low = 0;
    int high = srcArray.length - 1;
    while ((low <= high) && (low <= srcArray.length - 1)
                && (high <= srcArray.length -1)) {
        int middle = (high + low) >>1;
        if (des == srcArray[middle]) {
            return middle;
        } else if (des < srcArray[middle]) {
            high = middle - 1;
        } else {
            low = middle +1;
        }
    }
    return -1;
}

也可以用遞歸實現:

static int a[] = {1, 2, 5, 8, 7, 9};
static int k = 7; // 這里是要查找是數

public static void main(String[] s) {
    System.out.println("" + found(0, a.length-1));
}

// x、y是起始位置
public static int found(int x, int y) {
    int m = (y + x) / 2;    if (x > y) {
        return -1;
    } else {
        if (a[m] == k) return m;
        else if (a[m] > k) return found(x, m - 1);
        else return found(m + 1, y);
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容