插入排序之希爾排序

2021-10-06 04:33:07 字數 1625 閱讀 5766

直接插入排序與希爾排序相比還是有一些問題的。

結論:當需要插入的數是比較小的數時,後移的次數明顯增多,對效率有影響。

(1)交換法

@test

public

void

testsort()

long start = system.

currenttimemillis()

;//bubblesorting(array);//氣泡排序排序100000個數總耗時17984毫秒

//selectsorting(array);//選擇排序排序100000個數總耗時3203毫秒

//insertsorting(array);//直接插入排序100000個數總耗時1109毫秒

shellsortbyexchange

(array)

;//希爾的交換排序100000個數總耗時7829毫秒

long end = system.

currenttimemillis()

; system.out.

println

("總共耗時:"

+(end-start));

}//希爾排序

public

void

shellsortbyexchange

(int

array)}}

}}

(2)移動法

@test

public

void

testsort()

long start = system.

currenttimemillis()

;//bubblesorting(array);//氣泡排序排序100000個數總耗時17984毫秒

//selectsorting(array);//選擇排序排序100000個數總耗時3203毫秒

//insertsorting(array);//直接插入排序100000個數總耗時1109毫秒

//shellsortbyexchange(array);//希爾的交換排序100000個數總耗時7829毫秒

shellsortbymove

(array)

;//希爾的移動排序100000個數總耗時16毫秒

long end = system.

currenttimemillis()

; system.out.

println

("總共耗時:"

+(end-start));

}//希爾排序

public

void

shellsortbymove

(int

array)

//判斷此次迴圈有沒有移動

if(j != i)}}

}

總結:希爾排序的交換法和移動法的效率相差還是挺大的。

插入排序之希爾排序

希爾排序也屬於插入類排序演算法。希爾排序通過縮小增量,將待排序元素劃分為若干個子串行,分別對各個子串行按照直接按照插入排序演算法進行排序。當增量為1時,待排序元素構成乙個子串行,對該序列排序完畢後希爾排序演算法結束。如下 include void shellsort int a,int length...

插入排序 希爾插入排序

本文借鑑於lsgo實驗室創始人馬老師 演算法 希爾插入排序 delta len nums 2 while delta 0 shell delta,nums delta delta 2return nums defshell delta,key for i in range delta,len key...

插入排序 希爾排序

我們知道當乙個序列基本有序時,直接插入會變得很高效。因為此時只需少量的移動元素,操作集中在元素的比較上。基於這種想法,我們就試圖把乙個序列在進行直接插入前調整得盡量有序。這就是希爾排序 shell sort 的核心思路。shell只是演算法發明者的名字,無特殊含義 那到底該怎麼做呢?希爾排序一反以前...