本帖最後由 tonyh 於 2015-11-11 15:20 編輯
說明
如果搜尋的數列已經有排序,應該儘量利用它們已排序的特性,以減少搜尋比對的次數,這是搜尋的基本原則,二分搜尋法(Binary Search)是這個基本原則的代表。
解法
在二分搜尋法中,從數列的中間開始搜尋,如果這個數小於我們所搜尋的數,由於數列已排序,則該數左邊的數一定都小於要搜尋的對象,所以無需浪費時間在左邊的數;如果搜尋的數大於所搜尋的對象,則右邊的數無需再搜尋,直接搜尋左邊的數。
所以二分搜尋法,就是將數列不斷的分為兩個部份,每次從分割的部份中取中間數比對,反覆這個步驟直到比對成功。
範例
例如要搜尋92於以下的數列,首先中間數索引為(0+9)/2=4(索引由0開始):
[3 24 57 57 67 68 83 90 92 95]
由於67小於92,所以轉搜尋右邊的數列:
3 24 57 57 67 [68 83 90 92 95]
由於90小於92,再搜尋右邊的數列,這次就找到所要的數了:
3 24 57 57 67 68 83 90 [92 95]
優點
搜尋效率較佳
缺點
資料必須事先排序 |