Java算法-二分查找

二分查找前提條件:數組有序

public class BinarySearch {
    public static void main(String[] args) {
        int[] data = {0, 1, 2, 3, 4, 5};
        int num = 5;
        // 5
        System.out.println(binarySearch(data, num));
        // 1
        System.out.println(binarySearch(data, 1));
        // -1
        System.out.println(binarySearch(data, 7));
    }

    /**
     * 二分查找
     *
     * @param data the data
     * @param num  the num
     * @return the int
     */
    private static int binarySearch(int[] data, int num) {
        if (data == null || data.length == 0) {
            return -1;
        }
        int mid;
        int left = 0;
        int right = data.length - 1;
        while (left <= right) {
            // 避免加法溢出
            mid = left + ((right - left) >> 1);
            if (data[mid] < num) {
                // 中間值小於num,說明num在右邊,故去右邊查找
                left = mid + 1;
            } else if (data[mid] > num) {
                // 中間值大於num,說明num在左邊,故去左邊查找
                right = mid - 1;
            } else {
                return mid;
            }
        }
        return -1;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章