從根本上而言是對插入排序演算法的一種改進。
基本思想:
先取乙個小於n
的整數d1
作為第乙個增量,把檔案的全部記錄分成
d1個組。所有距離為
dl的倍數的記錄放在同乙個組中。先在各組
內進行直接插入排序
;然後,
取第二個增量d2重複上述的分組和排序,直至所取的增量
dt=1(dt,即所有記錄放在同一組中進行直接插入排序為止。
直接插入排序的作法是:
每次從無序表中取出第乙個元素,把它插入到有序表的合適位置,使有序表仍然有序。
第一趟比較前兩個數,
然後把第二個數按大小插入到有序表中
; 第二趟把第三個資料與前兩個數從後向前掃瞄,把第三個數按大小插入到有序表中;依次進行下去,進行了
(n-1)
趟掃瞄以後就完成了整個排序過程。
希爾排序演算法實現:
void
shellpass(list r,
intd)
while
(j > 0 && r[0].key < r[j].key); r[j + d] = r[0];
//插入
r到正確的位置上
} //endif
} //shellpass
void
shellsort(list r)
while
(increment > 1);
} //shellsort
排序演算法 希爾排序
如果乙個排序演算法,每次只把諸專案移動乙個位置,則它的平均執行時間至少要和n2成比例.因為在這個排序演算法執行的過程當中,每個記錄平均都必須遍歷n 3個位置,因此如果要對直接插入排序進行有效的,實質性的改進的話,就要有一種演算法,它可以使記錄做長距離的跳躍,而不是一步一步的挪動.希爾排序也是一種插入...
排序演算法 希爾排序
摘要 排序演算法有很多,最簡單的有氣泡排序和插入排序,這兩種方法都具有o n 2 的時間界.我們想要討論的是具有更好的時間界的排序演算法,比如希爾排序.1 希爾排序的思路是通過比較一定間距的元素來進行排序,最後再對所有相鄰元素進行一次插入排序.2 希爾排序最重要的引數是增量序列 h1,h2,ht 只...
排序演算法 希爾排序
希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。希爾排序通過將比較的全部元素分為幾個區域來提公升插入排序的效能。這樣可以讓乙個元素可以一次性地朝最終位置前進一大步。然後演算法再取越來越小的步長進行排序,演算法的最後一步就是普通的插入排序,但是到了這步,...