常見排序演算法之希爾排序演算法

2021-10-03 11:39:07 字數 1091 閱讀 8384

1.希爾排序簡介

1.介紹:

希爾排序(shell's sort)是插入排序的一種又稱「縮小增量排序」,

是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法

2.核心思想:

希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序演算法排序;

當增量減至1時,整個檔案恰被分成一組,演算法便終止

3.空間複雜度:o(1)

4.時間複雜度 ;o(n^(1.3—2))

5.特點:

希爾排序是一種優秀的排序

比氣泡排序大概塊五倍

比插入排序大概塊兩倍

比quicksort,mergesort,heapsort慢很多

適合5000以下的資料量

6.排序正確率問題

希爾排序是一種不穩定排序,排序正確率取決於增量d遞減的速度。

d遞減的越慢,正確率越高,d遞減的越快正確率越低

2.思路梳理

注意:關於這裡我們對於增量的選取問題,我在知乎上看過一篇**課題是有關於增量和效率的關係,文中寫「我們認為第k躺排序掃瞄的增量步長為2^k - 1 效率比較理想」,論壇上也有人說使用素數效率比較高。不過我認為如果想提高效率,換一種排序方式就可以了,增量對於效率的影響還是比較小的。

3.**實現

這裡要注意的是就是哪個for迴圈

public class shellsort ;

//陣列長度

int length = a.length;

//初始增量長度

int d = length/2;

//開始排序

while(true) }}

//判斷是否結束迴圈

if (d == 1)

//這裡由於數比較小讓b遞減1

d -= 1;

} //列印陣列

system.out.println(arrays.tostring(a));

}

常見排序演算法之希爾排序

希爾排序是基於插入排序的一種改進。以下摘自文字摘自 寫的確實很好 第一塊希爾排序介紹 準備待排陣列 6 2 4 1 5 9 首先需要選取關鍵字,例如關鍵是3和1 第一步分成三組,第二步分成一組 那麼待排陣列分成了以下三個虛擬組 6 1 一組 2 5 二組 4 9 三組 看仔細啊,不是臨近的兩個數字分...

常見演算法之 希爾排序

希爾排序的實質就是分組插入,該方法又稱縮小增量基本思想是 先將整個待排元素序列分割成若干子 由相隔某 增量 的組的 分別進行直接插入排序,然後依次縮減增量再待整個列中元素基本有序 增量足夠小 時,再對全體元素進行一次直接插入排。因為排序在元素基本有的情況下 接近最好 效率是很高,因此希爾時 排序在元...

常見排序演算法 希爾(shell)排序

原理 一般,講序列分成n 2組,然後進行排序,後再分為 n 2 2組,再進行排序,以此類推。例子 63 92 27 36 45 71 58 7 分組1次 63 9227 36 45 7158 7 排序 45 7127 7 63 9258 36 分組2次 45 71 27 7 63 92 58 36 ...