排序中的哨兵

2021-06-21 11:14:13 字數 662 閱讀 8679

直接插入排序演算法

(1).演算法描述

void lnsertsort(seqlist r)

while(r[0].key;//當r[i].key≥r[j].key時終止

r[j+1]=r[0]

;//r[i]插入到正確的位置上

}//endif

}//insertsort

(2).哨兵的作用

演算法中引進的附加記錄r[0]稱監視哨或哨兵(sentinel),哨兵有兩個作用:

① 進人查詢(插入位置)迴圈之前,它儲存了r[i]的副本,使不致於因記錄後移而丟失r[i]的內容;

② 它的主要作用是:在查詢迴圈中"監視"下標變數j是否越界。一旦越界(即j=0),因為r[0].key和自己比較,迴圈判定條件不成立使得查詢迴圈結束,從而避免了在該迴圈內的每一次均要檢測j是否越界(即省略了迴圈判定條件"j>=1")。

注意:①

實際上,一切為簡化邊界條件而引入的附加結點(元素)均可稱為哨兵。

【例】單鏈表中的頭結點實際上是乙個哨兵

② 引入哨兵後使得測試查詢迴圈條件的時間大約減少了一半,所以對於記錄數較大的檔案節約的時間就相當可觀。對於類似於排序這樣使用頻率非常高的演算法,要盡可能地減少其執行時間。所以不能把上述演算法中的哨兵視為雕蟲小技,而應該深刻理解並掌握這種技巧。

帶哨兵的插入排序

第一種實現不是那麼靈活 void insertsort int inputarray const int arraylength temparray 0 int min 以下開始對帶有哨兵的 temparray進行排序 for i 1 i arraylength i temparray j temp...

帶哨兵的氣泡排序 氣泡排序簡介

該樓層疑似違規已被系統摺疊 隱藏此樓檢視此樓 交換排序的基本思想是 兩兩比較待排序記錄的關鍵字,發現兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止。應用交換排序基本思想的主要排序方法有 氣泡排序和快速排序。氣泡排序 1 排序方法 將被排序的記錄陣列r 1.n 垂直排列,每個記錄r i 看作是...

Redis中的哨兵機制

sentinel哨兵機制實際上就是對redis的主從節點進行監控,當主節點發生宕機之後,被多個sentinel哨兵發現,然後他們從從節點中推選出新的主節點,告訴其他從節點新的主節點的位址,最後將新的主節點的位址告知連線sentinel的客戶端。值得注意的是,如果原來的主節點在宕機之後突然復活,它也只...