哨兵的作用
演算法中引進的附加記錄r[0]稱監視哨或哨兵(sentinel)。
哨兵有兩個作用:
① 進人查詢(插入位置)迴圈之前,它儲存了r[i]的副本,使不致於因記錄後移而丟失r[i]的內容;
② 它的主要作用是:在查詢迴圈中"監視"下標變數j是否越界。一旦越界(即j=0),因為r[0].key和自己比較,迴圈判定條件不成立使得查詢迴圈結束,從而避免了在該迴圈內的每一次均要檢測j是否越界(即省略了迴圈判定條件"j>=1")。
注意:① 實際上,一切為簡化邊界條件而引入的附加結點(元素)均可稱為哨兵。
【例】單鏈表中的頭結點實際上是乙個哨兵
② 引入哨兵後使得測試查詢迴圈條件的時間大約減少了一半,所以對於記錄數較大的檔案節約的時間就相當可觀。對於類似於排序這樣使用頻率非常高的演算法,要盡可能地減少其執行時間。所以不能把上述演算法中的哨兵視為雕蟲小技,而應該深刻理解並掌握這種技巧。
順序查詢(監視哨) 折半查詢
順序查詢 不帶監視哨int search seq 1 sstable s,elemtype key return i 不帶監視哨的寫法中,沒迴圈一次都要判斷兩個條件1 i折半查詢 折半查詢僅適用於對有序表的查詢 查詢原理是附設三個指標,low,high,mid 初始化分別執行表頭 表尾 表的中間元素...
順序查詢(利用監視哨)的實現
include include includeusing namespace std typedef int keytype typedef int infotype define max 100 typedef struct elemtype typedef structsstable int s...
C語言 希爾排序 使用監視哨
希爾排序 shell s sort 是插入排序的一種又稱 縮小增量排序 diminishing increment sort 是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因d.l.shell於1959年提出而得名。具體思想就是從無序的陣列中每隔一段間隔挑出來乙個數字...