直接插入排序與希爾排序相比還是有一些問題的。
結論:當需要插入的數是比較小的數時,後移的次數明顯增多,對效率有影響。
(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只是演算法發明者的名字,無特殊含義 那到底該怎麼做呢?希爾排序一反以前...