(帶哨兵)直接插入排序

2021-07-30 23:32:24 字數 721 閱讀 5148

將乙個記錄插入到已排序好的有序表中,從而得到乙個新,記錄數增1的有序表。即:先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。

要點:設立哨兵,作為臨時儲存和判斷陣列邊界之用。

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

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

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

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

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

public static void main(string args) ;

int n=a.length;

for(int i=1;i=0&&x

如果碰見乙個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒有改變,從原無序序列出去的順序就是排好序後的順序,所以插入排序是穩定的。時間複雜度:o(n^2).

插入類排序 帶哨兵的直接插入排序

隨機生成5000個整數,採用直接插入排序法進行排序 輸入乙個整數x,採用折半查詢之,若存在,輸出下標,否則輸出 1.include include include using namespace std void createnode int l 隨機生成5000個整數 void insertsor...

直接插入排序哨兵節點

在 資料結構 直接排序演算法中引入了哨兵節點 目的 減少了越界檢查 只是為了表明哨兵這種結構的潛在價值?將資料直接放置在a 1 n 上 a 0 作為哨位節點 void insertsort item data,int len data j 1 data 0 怎乙個e xin了得 首先更改資料結構 t...

直接插入排序

直接插入排序是一種最簡單的排序方法,它的基本思想是依次將每個記錄插入到乙個有序中去。就是說,第i i 1 遍整理時,a1,a2,ai 1已經是排好序的子串行 取出第i個元素ai,在已排好序的子串行為ai找到乙個合適的位置,並將它插到該位置上。易知上述排序當i 1時實際上為空操作,故可直接從i 2開始...