二分查找

二分查找的概念

在計算機科學,二分搜索(英語:binary search),也稱折半搜索(英語:half-interval search)、對數搜索(英語:logarithmic search),是一種在有序數組中查找某一特定元素的搜索算法,搜索過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結束;如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。如果在某一步驟數組爲空,則代表找不到。這種搜索算法每一次比較都使搜索範圍縮小一半

應用二分查找的條件

數據應該
- 存儲在數組中
- 有序排列

問題1:爲什麼要存儲在數組中?
問題2:爲什麼要有序排列?

二分查找的算法的實現

import java.util.Arrays;

public class BinarySearch {
    public static void main(String[] args) {
        int a[]={1,7,3,8,9,12,6,15,17};
        Arrays.sort(a);
        for (int b : a) {
            System.out.print(b+" ");
        }
        System.out.println();
        System.out.println(search(15,a));
    }
    public static int search(int key,int[] a){
        int lo = 0;
        int hi = a.length - 1;
        while (lo <= hi) {
            // Key is in a[lo..hi] or not present.
            int mid = lo + (hi - lo) / 2;
            if(key < a[mid]){
                hi = mid - 1;
            }
            else if (key > a[mid]) {
                lo = mid + 1;
            }
            else return mid;
        }
        return -1;
    }
}

問題1:可以在鏈表上實現,但是鏈表的隨機訪問效率很低,所以需要數組。
問題2:有序可以使每次比較後範圍縮小一半,查找速度快

二分查找過程描述

查找的數爲15,把數組排序後:
1 3 6 7 8 9 12 15 17

第1次:lo=0,hi=8,mid=4,a[mid]=8
第2次:lo=5,hi=8,mid=4,a[mid]=12
第3次:返回mid

3次可以把數找出來

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章