2020.2.10
21:23
希爾排序:
描述:將整個待排序的序列分割成為若干個子串行,分別進行直接插入排序,
等到整個序列基本有序 時,再對全體的序列進行一次直接插入排序。
技巧:
子串行的構成不是簡單地"逐段分割",將相隔某個增量dk的記錄組成乙個子串行,讓增量dk
逐趟縮短(例如依次取5, 3,1)知道dk=1為止。
優點:小元素能夠跳躍式地前移
最後一趟增量為1的時候,序列已基本有序
平均效能優於直接插入排序
(**於網路)
第一趟,相隔5個長度的數(一般d = n/2)為乙個子串行,如圖(59,14)、(20,23)、(17,83)、(36,13)、(98,28)為子串行,在子串行內直接插入排序;
第二趟,相隔2個長度的數(一般d = d/2)為乙個子串行,如圖(14,17,28,23,36)、(20,13,59,83,98)為子串行,在子串行內直接插入排序;
第三趟,相隔1個長度的數(一般d = d/2)為乙個子串行,在子串行內直接插入排序;
總結:
dk的值較大的時候,子串行中的物件很少,速度比較快。
dk的值逐漸變小,子串行中的物件變多,但是大多數物件已經基本有序,所以排序的速度依然很快
**演示:
package lanqiaoknowledgepractise;
public
class
shellsorttest
arr[j+inteval]
=target;}}
}public
static
void
main
(string[
] args)
; system.out.
println
("排序前:");
for(
int i=
0;i) system.out.
println()
;shellsort
(arr)
; system.out.
println
("排序之後:");
for(
int i=
0;i}
收工收工!
排序 希爾排序
希爾排序 shell sort 又稱為縮小增量排序,輸入插入排序演算法,是對直接排序演算法的一種改進。本文介紹希爾排序演算法。對於插入排序演算法來說,如果原來的資料就是有序的,那麼資料就不需要移動,而插入排序演算法的效率主要消耗在資料的移動中。因此可知 如果資料的本身就是有序的或者本身基本有序,那麼...
排序 希爾排序
縮小增量排序 待排序列按關鍵字基本有序時,直接插入排序的效率很高 希爾排序思想 將整個待排記錄分割為若干子串行分別進行直接插入排序,待整個序列中的記錄基本有序時,再對全體記錄進行一次直接插入排序,就可以完成整個排序工作 增量序列中的值沒有除1以外的公因子,且最後乙個增量必須等於1 子串行的構成不是逐...
排序 希爾排序
希爾排序是插入排序中的乙個分支,但是較簡單插入排序又有較大的改進,這使得它成為了歷史上第一批突破二次時間屏障的排序演算法之一哦。它是通過比較一定間隔的元素來工作的。因此希爾排序又稱為縮小增量排序。直接插入排序對於原始資料基本有序的情況下,效率較高。在此的基礎上。我們可以想辦法,使資料基本有序,然後利...