二分搜尋法是線性搜尋法的改進版,可以用於已排序的線性資料結構的搜尋,例如:一維陣列(array)、串列(list)、堆疊(stack)或是佇列(queue)。一般搜尋演算法需要輸入一個陣列,搜尋陣列中的特定元素,並且回傳特定元素的索引位置,如果沒有找到,則回傳 -1。二分搜尋法會輸入一個已排序的陣列,從中間的元素開始進行比對,如果比搜尋目標大則往右/後搜尋,如果比搜尋目標小則往左/前搜尋。每次只會搜尋左/右半邊,如此就可以降低比對的次數,直到陣列被搜尋完畢為止。
a = [1, 2, 3, 5, 6, 7, 30, 40, 70]
@test binarysearch(a, 1) == 1
@test binarysearch(a, 40) == 9
@test binarysearch(a, 7) == 5
@test binarysearch(a, 100) == -1
a = [1, 2, 3, 5, 6, 7, 30, 40, 70]