選單
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

DSA 線性搜尋


線性搜尋

線性搜尋演算法透過陣列進行搜尋,並返回所搜尋值的索引。

速度

當前值: {{ currVal }}

{{ msgDone }}
{{ index }}

執行上面的模擬,檢視線性搜尋演算法的工作原理。

要檢視值未找到時會發生什麼,請嘗試查詢值 5。

這種演算法非常簡單,易於理解和實現。

如果陣列已經排序,最好使用我們將在下一頁介紹的、速度快得多的二分搜尋演算法。

排序演算法和搜尋演算法之間的一個大區別是,排序演算法會修改陣列,而搜尋演算法會保持陣列不變。

工作原理

  1. 從頭開始逐個遍歷陣列。
  2. 將每個值與要查詢的值進行比較,看它們是否相等。
  3. 如果找到該值,則返回該值的索引。
  4. 如果到達陣列末尾仍未找到該值,則返回 -1,表示未找到該值。

手動演練

在實際用程式語言實現線性搜尋之前,我們先手動嘗試一下,以便更好地理解其工作原理。我們將搜尋值 11。

第一步: 我們從一個隨機值陣列開始。

[ 12, 8, 9, 11, 5, 11]

第二步: 我們檢視陣列中的第一個值,它是否等於 11?

[ 12, 8, 9, 11, 5, 11]

第三步: 我們移動到索引 1 處的下一個值,並將其與 11 進行比較,看它們是否相等。

[ 12, 8, 9, 11, 5, 11]

第四步: 我們檢查索引 2 處的下一個值。

[ 12, 8, 9, 11, 5, 11]

第五步: 我們移動到索引 3 處的下一個值。它是否等於 11?

[ 12, 8, 9, 11, 5, 11]

我們找到了!

值 11 在索引 3 處找到。

返回索引位置 3。

線性搜尋完成。


執行下面的模擬,以動畫形式檢視以上步驟。

{{ msgDone }}
[
{{ x.dieNmbr }}
]

手動執行:發生了什麼?

這個演算法非常直接。

從陣列開頭開始檢查每個值,看該值是否等於 11(我們要查詢的值)。

找到該值後,搜尋停止,並返回找到該值的索引。

如果遍歷整個陣列都沒有找到該值,則返回 -1。


線性搜尋實現

要實現線性搜尋演算法,我們需要

  1. 一個包含要搜尋值的陣列。
  2. 要搜尋的目標值。
  3. 一個從頭到尾遍歷陣列的迴圈。
  4. 一個 if 語句,用於比較當前值與目標值,如果找到目標值,則返回當前索引。
  5. 迴圈結束後,返回 -1,因為此時我們知道目標值未找到。

線性搜尋的結果程式碼如下所示:

示例

def linearSearch(arr, targetVal):
    for i in range(len(arr)):
        if arr[i] == targetVal:
            return i
    return -1

arr = [3, 7, 2, 9, 5]
targetVal = 9

result = linearSearch(arr, targetVal)

if result != -1:
    print("Value",targetVal,"found at index",result)
else:
    print("Value",targetVal,"not found")
執行示例 »

線性搜尋時間複雜度

有關時間複雜度的一般性解釋,請訪問此頁面

有關插入排序時間複雜度的更全面、詳細的解釋,請訪問 此頁面

如果線性搜尋執行並找到目標值,並且目標值是 \(n\) 個值的陣列中的第一個陣列值,則只需要一次比較。

但是,如果線性搜尋遍歷完 \(n\) 個值的整個陣列而沒有找到目標值,則需要 \(n\) 次比較。

這意味著線性搜尋的時間複雜度為:

\[ O(n) \]

如果我們繪製線性搜尋在 \(n\) 個值的陣列中查詢值所需的時間圖,我們會得到這張圖:

Time Complexity

執行下面的模擬,嘗試不同的陣列大小,看看線性搜尋需要多少次比較才能在 \(n\) 個值的陣列中找到一個值。

{{ this.userX }}

操作次數:{{ operations }}
未找到!

 

在上面的模擬中選擇“隨機”、“降序”或“升序”對線性搜尋的速度沒有影響。


DSA 練習

透過練習來測試自己

練習

完成程式碼。

def linearSearch(arr, targetVal):
    for i in range(len(arr)):
        if arr[i] == targetVal:
          
    return -1

開始練習



×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援