希爾排序:先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行依次直接插入排序。
以n=10的乙個陣列49, 38, 65, 97, 26, 13, 27, 49, 55, 4為例
第一次 gap = 10 / 2 = 5
4938
6597
2613
2749554
1a 1b
2a 2b
3a 3b
4a 4b
5a 5b
1a,1b,2a,2b等為分組標記,數字相同的表示在同一組,大寫字母表示是該組的第幾個元素, 每次對同一組的資料進行直接插入排序。即分成了五組(49, 13) (38, 27) (65, 49) (97, 55) (26, 4)這樣每組排序後就變成了(13, 49) (27, 38) (49, 65) (55, 97) (4, 26),下同。
第二次 gap = 5 / 2 = 2
排序後:
1327
4955449
3865
9726
1a 1b 1c1
d1e2a 2b 2c2
d2e第三次 gap = 2 / 2 = 1
排序後:426
1327
3849
4955
9765
1a 1b 1c1
d1e1f 1g 1h 1i1j
第四次 gap = 1 / 2 = 0
排序完成得到陣列:413
2627
3849
4955
6597
結果:public
static
void
shellsort(int arr)
arr[j + gap] = temp;}}
//輸出過程
for (int k = 0; k < length; k++)
system.out.println();
}}
source:836
59410
7124
3612
81075
9214
3576
81091
2345
6789
10
插入排序 希爾插入排序
本文借鑑於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只是演算法發明者的名字,無特殊含義 那到底該怎麼做呢?希爾排序一反以前...
插入排序 希爾排序
希爾排序又叫縮小增量排序,希爾排序是1959 年由d.l.shell 提出來的,相對直接排序有較大的改進。基本思想 先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序,待整個序列中的記錄 基本有序 時,再對全體記錄進行依次直接插入排序。基本操作如下 第一步 選擇乙個增量序列t1,t2,t...