二分搜尋

二分搜尋

簡單

簡介

你偶然遇上了一群既是數學家、也是創作歌手的人。 他們為每一個自己喜歡的數字寫了一首歌,而你可以想見,他們喜歡的數字還真不少(例如 0、73 或 6174)。

你很想知道自己最喜歡的數字是哪一首歌,但歌這麼多,要找到正確的那一首可得花上一段時間。 幸好,他們把歌曲整理成一份依標題排序的播放清單,而標題就是歌曲所描寫的那個數字。

你發現,只要用二分搜尋演算法,就能依標題快速找到想聽的那首歌。

說明

你的任務是實作二分搜尋演算法。

二分搜尋演算法會反覆把陣列對半切分,只保留包含目標項目的那一半,藉此在陣列中找到某個項目。 它能讓我們快速縮小目標項目可能所在的位置,直到找到它,或是排除掉所有可能的位置。

Caution

二分搜尋只適用於已經排序過的陣列。

這個演算法看起來像這樣:

  • 找出已排序陣列中間的元素,並把它和我們要找的項目做比較。
  • 如果中間的元素就是我們的項目,那就完成了!
  • 如果中間的元素大於我們的項目,我們就可以排除那個元素以及它之後的所有元素。
  • 如果中間的元素小於我們的項目,我們就可以排除那個元素以及它之前的所有元素。
  • 如果陣列中的每個元素都被排除了,就代表這個項目不在陣列裡。
  • 否則,就對陣列中尚未被排除的部分重複這個流程。

這裡有個例子:

假設我們要在下面這個已排序的陣列中尋找數字 23:[4, 8, 12, 16, 23, 28, 32]。

  • 我們先拿 23 和中间元素 16 做比較。
  • 因為 23 大於 16,我們可以排除陣列的左半邊,剩下 [23, 28, 32]。
  • 接著我們拿 23 和新的中间元素 28 做比較。
  • 因為 23 小於 28,我們可以排除陣列的右半邊:[23]。
  • 我們找到目標項目了。

出處

Wikipedia連結會在新視窗或分頁中開啟
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Delphi Pascal Exercism

準備好開始 二分搜尋 了嗎?

註冊 Exercism,透過 76 個練習 和真人引導來學習並精通 Delphi Pascal,全部免費。