首先要明確一下什麼是監視哨
這個詞很容易望文生義
錯誤地認為是監視比較的值
查閱資料才發現
監視哨的意義是防止下標越界,提高速度
在插入排序中,
取用r[0]作為監視哨,就可以在迴圈中減少一次判斷j>0的條件,從而提高速度
而在本題之中,採取五個監視哨的目的在於
希爾排序是跳躍的,最大的區間d[0]是5,所以只要防止j-5<0即可,不過還是存在bug!!
網上也找不到多監視哨的希爾排序,著實燒腦。
經過我半小時+的禿頭思考後,發現問題在於監視哨的key值,每個監視哨都必須初始化0,當然作為r[0]的監視哨還擔任儲存單元的雙重使命,也可以不初始化。
自此,程式順利完成
//希爾排序的程式**
#include
//順序表結構型別定義
typedef
int datatype;
typedef
struct
rectype;
const
int n=10;
const
int d1=5;
void
create
(rectype,
int)
;void
print
(rectype,
int)
;void
shellsort
(rectype,
int)
;int
main()
;//設定3趟的增量
create
(r,n)
;//建立存放記錄的順序表
printf
("排序前的資料:");
print
(r,n)
;//輸出排序前的記錄表
shellsort
(r,d)
;//希爾排序
printf
("排序後的資料:");
print
(r,n)
;//輸出排序後的記錄表
}//建立順序表
void
create
(rectype r,
int n)
//輸出順序表
void
print
(rectype r,
int n)
//新增希爾排序演算法
void
shellsort
(rectype r,
int d)
for(k=
0;k<
3;k++
) r[j+d[k]
+d1-1]
.key=r[0]
.key;}}
}}
C語言 希爾排序 使用監視哨
希爾排序 shell s sort 是插入排序的一種又稱 縮小增量排序 diminishing increment sort 是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因d.l.shell於1959年提出而得名。具體思想就是從無序的陣列中每隔一段間隔挑出來乙個數字...
資料結構 希爾排序!!!
希爾排序是將一組資料進行分組,再將分組的資料進行排序,這樣資料就會逐漸的趨向有序,當分組的個數為1的時候將整個陣列排序一遍,那麼整個陣列就排序好了。基本思想 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基...
資料結構 希爾排序
1 希爾排序是在直接插入排序的基礎上改良而來的,直接插入排序需要記錄基本有序的情況下才能變得很高效,希爾排序便是採取跳躍分割的策略,將相距 增量 的元素組成乙個子串行,這樣才能保證最後進行直接插入排序時的序列是基本有序的。希爾排序的時間複雜度是 2 希爾排序實現演算法 include include...