線性搜索算法
簡介
線性搜索算法又被稱為順序搜索算法,是一種暴力算法。主要是通過從頭至尾開始逐個檢舉來確定所需數據的位置。
如果不在列表中則通過返回特殊值進行標記。
偽代碼如下
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).