線性搜索算法


線性搜索算法

簡介

  線性搜索算法又被稱為順序搜索算法,是一種暴力算法。主要是通過從頭至尾開始逐個檢舉來確定所需數據的位置。
如果不在列表中則通過返回特殊值進行標記。

偽代碼如下

  PS:在偽代碼中以procedure標記一個程序的開始,其后說明程序的名字及具體參數,並且數組的下標從1開始。沒有分號標記一個句子的結束,代碼用行進行分割。

  procedure linear search(x: 整數, A1, A2, ..., An: 整數)
  i := 1
  while i <= n 和 x != A[i]
    i := i + 1
  if i <= n then location := i
  else location := 0
  return location {location 是等於x的項的下標,如果找不到x則是0}


C代碼如下

int linearSearch(const int aim, const int array[], const int len) { for(int i = 0; i != len; ++i) { if(array[i] == aim) return i; } return -1; }

 

缺點

  • 普通的線性搜索算法只能夠返回匹配的第一個位置,當列表中有多個數據匹配時就需要對代碼進行更改。
  • 由於需要逐個進行匹配,所以效率比較低。
  • 算法效率不穩定。比如列表第一個數據就是匹配項,和列表無匹配項時所需要的運行時間相差較大。

算法復雜度

  • 最優情況下的時間復雜度

    當列表中的第一個數據就是待查找數據時,程序只需要進行2次比較,此時時間復雜度為Θ (1)。

  • 最壞情況下的時間復雜度

    當數據不在列表中時,就需要對所有的數據進行比較,需要2N+1次比較(N為數組的長度),此時時間復雜度為Θ (N)。

  • 平均情形下的時間復雜度

    當列表中的第一個數據就是待查找數據時,程序只需要進行2次比較,而第二個數據是待查找數據時,程序又需要進行2次比較,因此程序
     平均需要進行(2+4+6+8+...+2N)/N = N+1次比較。即Θ(N).


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM