基本演算法之希爾排序

2021-06-29 06:43:45 字數 686 閱讀 4247

又到這個點了,再來看乙個基本的排序演算法–希爾排序(shellsort),其實希爾排序是對插入排序的改進,改進的著眼點:

基本思想:通過增量將整個待排序記錄分割成若干個子串行,在子串行內分別進行直接插入排序,然後不斷縮小增量,待整個序列中的記錄基本有序時,對全體記錄進行直接插入排序。由於這個原因,希爾排序有時也叫做縮小增量排序。

使用這種增量的分割待排序列的目的:

基本有序:接近正序,例如;

區域性有序:部分有序,例如。

區域性有序不能提高直接插入排序演算法的時間效能。

演算法描述:

void shellsort(elementype a,int n )

a[j]=temp;

}}

希爾排序演算法的時間效能

希爾排序開始時增量較大,每個子串行中的記錄個數較少,從而排序速度較快;當增量較小時,雖然每個子串行中記錄個數較多,但整個序列已基本有序,排序速度也較快。

希爾排序演算法的時間效能是所取增量的函式,而到目前為止尚未有人求得一種最好的增量序列。

研究表明,希爾排序的時間效能在o(n^2)和o(nlogn)之間。當n在某個特定範圍內,希爾排序所需的比較次數和記錄的移動次數約為o(n^1.3 ) 。

排序演算法之希爾排序

希爾排序實際上是一種分治思想的插入排序。插入排序不說了,不清楚看這裡 分治思想,對增量為dk,dk遞減,開始很多小序列,最後為乙個大序列 相對直接插入排序,在希爾排序中,只不過增量不是1,而是dk 較好的增量序列是2 k 1,2 k 1 1,7,3,1,這樣可使shell排序時間複雜度達到o n 1...

排序演算法之希爾排序

希爾排序 shell sort 又稱為縮小增量排序,輸入插入排序演算法,是對直接排序演算法的一種改進。本文介紹希爾排序演算法。對於插入排序演算法來說,如果原來的資料就是有序的,那麼資料就不需要移動,而插入排序演算法的效率主要消耗在資料的移動中。因此可知 如果資料的本身就是有序的或者本身基本有序,那麼...

排序演算法之希爾排序

希爾排序,突破了 通過交換相鄰元素進行排序的任何演算法平均需要 n 2 的二次時間限制 通過比較相距一定間隔的元素來工作。使用乙個增量序列 h1 1,h2,ht,在使用乙個 增量h的一趟排序後,對於每乙個i滿足pdata i pdata i h 即此時序列是h排序的 各趟 比較所用的距離逐漸減小,直...