高階排序之希爾排序

2021-10-06 20:47:29 字數 1077 閱讀 5129

希爾排序(shell's sort)是插入排序的一種又稱「縮小增量排序」(diminishing increment sort),是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因d.l.shell於2023年提出而得名。

}}這裡需要注意的是如果希爾增量按照減半的方式去遞減的話會在一些特殊情況下效率較低,看下面這個例子

如果這個我們按照增量 4 2去遞減 直到為1的時候才會去真正的操作,這樣會使效率降低,對於這樣的陣列,希爾排序不但沒有減少直接插入排序的工作量,反而白白增加了分組操作的成本。

為了保證分組粗調沒有盲區,每一輪的增量需要彼此「互質」,也就是沒有除1之外的公約數。

於是,人們相繼提出了很多種增量方式,其中最具代表性的是hibbard增量和sedgewick增量。

hibbard的增量序列如下:

1,3,7,15......

通項公式 2^k-1

利用此種增量方式的希爾排序,最壞時間複雜度是o(n^(3/2))

sedgewick的增量序列如下:

1, 5, 19, 41, 109......

通項公式 9*4^k - 9*2^k + 1 或者 4^k - 3*2^k + 1

利用此種增量方式的希爾排序,最壞時間複雜度是o(n^(4/3))

關於這兩種增量方式的時間複雜度,有些需要很複雜的數學證明,有些是人們的大致猜想,大家暫時不用糾結。

相同的元素在排序之後會改變原來的次序,由此可見希爾排序是乙個不穩定排序。

迄今為止,除了在一些特殊的情況下,還沒有人能夠從理論上分析希爾排序的效率 。有各種各 樣基於試驗的評估 ,估計它的時間級從 o(n^3/2)到 o(n^7/6)之間。

高階排序之希爾排序

希爾排序原理 希爾排序 是d.l.shell與1959年提出的一種排序演算法,在這之前的排序演算法的時間複雜度基本都是o n 2 希爾演算法是第乙個打破這個時間複雜度的演算法。希爾排序是直接插入排序的公升級演算法,其核心思想是讓乙個序列分成若干個子串行,分隔方法是將相隔某個增量的記錄組成自序列,在子...

高階排序 希爾排序

希爾排序 實際上是基於插入排序的,在插入排序中相比較的是相鄰的兩個元素,但是如果乙個很小的數在陣列的最右端,而他本應該是在最左端的,這樣的話所有中間的元素都要向右移動一位,並且執行了n次。希爾排序就是首先對大跨度的元素做比較並且進行移動,這樣的久相對有序了,再在這個基礎上進行普通的插入排序,效率就會...

高階排序演算法 希爾排序

希爾排序 希爾排序是插入排序的優化版。回憶一下插入排序,假如插入排序執行到一半的時候,這時陣列左邊是已經排好序的,而右邊是還沒有排序的。如果有乙個很小的資料項恰好在右邊的位置,這時所有左邊已排好序的陣列都得往右移,騰出空位讓這個小的資料項插入。希爾排序是在插入演算法的基礎上再次降低交換的次數,以此獲...