插入排序 希爾排序

2021-08-07 03:45:44 字數 1366 閱讀 4689

希爾排序:先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行依次直接插入排序。

以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...