1、定義
順序查找又叫線性查找,是最基本的查找技術。
2、基本思想
從表的一端開始(第一個或最后一個記錄),順序掃描線性表,依次將掃描到的結點關鍵宇和給定值K相比較。若當前掃描到的結點關鍵字與K相等,則查找成功;若掃描結束后,仍未找到關鍵字等於K的結點,則查找失敗。
3、存儲結構
順序查找方法既適用於線性表的順序存儲結構,也適用於線性表的鏈式存儲結構(使用單鏈表作存儲結構時,掃描必須從第一個結點開始)。
注意:單鏈表為什么從第一個掃描,而不是最后一個,這與其存儲結構有關,單鏈表名字即表示第一個第一個結點的地址,而不是最后一個結點的地址。
4、順序查找算法
(1)類型說明
(2)具體算法
上述操作中,每次循環都需要對i是否越界,即是否小於等於n做判斷,我們可以設置一個哨兵,不需要每次i與n作比較,改進方案如下:
當然參數也可以如下設置,把元素個數放在數據結構體中定義:
3、算法分析
① 算法中監視哨R[0]的作用
為了在for循環中省去判定防止下標越界的條件i≥1,從而節省比較的時間。
② 成功時的順序查找的平均查找長度:
在等概率情況下,pi=1/n(1≤i≤n),故成功的平均查找長度為
(n+…+2+1)/n=(n+1)/2
即查找成功時的平均比較次數約為表長的一半。
若K值不在表中,則須進行n+1次比較之后才能確定查找失敗。
③ 表中各結點的查找概率並不相等的ASL
【例】在由全校學生的病歷檔案組成的線性表中,體弱多病同學的病歷的查找概率必然高於健康同學的病歷,由於上式的ASLsq在pn≥pn-1≥…≥p2≥p1時達到最小值。
若事先知道表中各結點的查找概率不相等和它們的分布情況,則應將表中結點按查找概率由小到大地存放,以便提高順序查找的效率。
為了提高查找效率,對算法SeqSearch做如下修改:每當查找成功,就將找到的結點和其后繼(若存在)結點交換。這樣,使得查找概率大的結點在查找過程中不斷往后移,便於在以后的查找中減少比較次數。
④ 順序查找的優點
算法簡單,且對表的結構無任何要求,無論是用向量還是用鏈表來存放結點,也無論結點之間是否按關鍵字有序,它都同樣適用。
⑤ 順序查找的缺點
查找效率低,因此,當n較大時不宜采用順序查找。
⑥ 適用情況
對那些查找少而又經常需要改動的線性表,可采用鏈表作存儲結構,進行順序查找。