排序演算法之希爾排序

2021-10-09 18:37:03 字數 753 閱讀 2651

從此篇開始將介紹較為高階的排序演算法,相信大家已經發現,前面的幾篇演算法的時間複雜度表現並不優秀,下面將介紹時間複雜度表現不錯的幾種排序演算法

其中很多用到了分治法的思想,望大家多多體會

官話:1、選定乙個增量長,按照增量長h作為資料分組的依據。對資料進行分組

2、對分好組的每一組資料完成插入排序

3、減小增量長,最小為1,

void

get_h

(int array_length)

}

白話:

這相當於是乙個捉組的過程,第一次捉的方法類似於物理的逐差法,「逐差」的距離逐漸減小,最終減小為1,變成整個陣列的排列,在這個過程中,我們對於每一次捉到的對進行需要的順序調整,到最後實現整個陣列的順序排列

此處由於h屬於動態變化,屬於無法分析的範疇

#include

using

namespace std;

void

shellsort

(int a,

int lenth)

a[j]

= temp;

} gap = gap /2;

}}intmain()

;shellsort

(sample,10)

;for

(int i =

0; i <

10; i++

)return0;

}

排序演算法之希爾排序

希爾排序實際上是一種分治思想的插入排序。插入排序不說了,不清楚看這裡 分治思想,對增量為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排序的 各趟 比較所用的距離逐漸減小,直...