二元搜尋法(Binary Search),又稱作二分搜尋法、對數搜尋,是一個在已排序的序列中,快速找出特定元素的搜尋演算法。此種搜尋法會先將各元素做排序,並且每次搜尋時會將序列從中一分為二,將目標值與序列中間值做比較。如果目標值即為中間值,則搜尋成功。若目標值小於中間值則往序列左邊繼續尋找,反之,若目標值大於中間值則往序列右邊尋找。以此類推,直到找到目標值或是序列清空為止。
二元搜尋法適合解決以下問題:
範例說明
問題:以下有一個已經排序好的數列,共有9個元素,請找出19是否在序列中。
題目數列:[1, 2, 3, 5, 7, 9, 11, 19, 25]
【文字說明解法】:
Step1. 找到中間值,9/2=4.5。第五個元素為7,而目標值19大於中間值7。因此往第五個元素以後的序列找尋目標值,故所剩序列1僅剩下四個元素。
所剩序列1:[ 9, 11, 19, 25]
Step2. 繼續將序列剖半,尋找中間值,4/2=2。所剩序列1中第二個元素為11,而目標值19大於中間值11。因此往所剩序列1中第二個元素以後的序列尋找目標值,故所剩序列2僅剩下兩個元素。
所剩序列2:[19, 25]
Step3. 再一次將序列剖半,2/2=1。所剩序列2中第一個元素為19,而目標值19等於中間值,故搜尋結束。
【圖解法】(可搭配文字說明服用):
優點:
缺點:
參考資料: