八大排序之希爾排序

2021-10-07 04:21:23 字數 836 閱讀 8254

學希爾排序之前,必須要有插入排序演算法的基礎

插入排序演算法:八大排序之插入排序

可以這麼說,希爾排序就是對插入排序的優化

為什麼這麼說呢?

場景:2,3,4,5,6 ,1

現在輪到把 1 插入到正確的位置上, 很明顯肯定是插在第一位,即:1 2 3 4 5 6,但是可以看出要比較5次,雖然5次並不多,但是在大資料量的情況下,這個比較次數就有些恐怖了;

這時希爾排序橫空出世,其演算法思路很簡單,即:不再像插入排序一樣,乙個乙個的往前的比較;而是跨距離比較。

上面的例子:2,3,4,5,6 ,1

思路:如果這個時候我們直接拿 1 與 2 比較,就可以一次插入到正確的位置了,並且跨了5個距離。

不過距離也不是亂設定的,距離是按照:n/2,n/4,n/8…一直到 n/2^k == 1 為止,其中n代表數字的個數,k取值範圍[1,正無窮),

綜合例子:1 2 3 4 5 6 7 8,注意:1 2 … 並不是實際比較的數字,而是位置

希爾排序思路:

第一輪: 距離為8/2=4,5跟1比較,6跟2,7跟3,8跟4

第二輪: 距離為8/4=2, 3 --1,4 – 2 ,5 – 3,5 – 1,6 – 4,6 – 2, 7 --5,7 – 3 ,7 – 1 …

第三輪:距離為1 , 2 – 1 ,3 --2 , 3 – 1, 4 – 3, 4 – 2,4 – 1 …

public

static

void

shell

(int

arr)

arr[tempindex]

=temp;}}

}}

八大排序之希爾排序

package com.eight.paixu 希爾排序法 希爾排序 shellsorting 又稱為 縮小增量排序 該方法的基本思想是 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,待整個序列中的元素基本有序 增量足夠小 時,再對全體元素進行一次直接...

八大排序 希爾排序

希爾排序 shell sort 是插入排序的一種。是直接插入排序的改進版,它是非穩定排序演算法。其得名於它的提出者d.l.shell,shell sort等演算法的提出打破了 排序演算法不可能突破o n 2 的魔咒,它將排序演算法的時間複雜度提成到了o nlogn 不可能超越的o n 2 徹底成為了...

八大排序 希爾排序

希爾排序 shell s sort 是插入排序的一種 又稱為 縮小增量排序 diminishing increment sort 是直接插入排序演算法的一種更高效的改進版本。希爾排序是不穩定的排序演算法。希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序演算法排序 隨著增量的逐漸減少,每組...