學希爾排序之前,必須要有插入排序演算法的基礎
插入排序演算法:八大排序之插入排序
可以這麼說,希爾排序就是對插入排序的優化
為什麼這麼說呢?
場景: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 是直接插入排序演算法的一種更高效的改進版本。希爾排序是不穩定的排序演算法。希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序演算法排序 隨著增量的逐漸減少,每組...