排序数组: [8, 3, 5, 2, 9, 1, 6, 4, 7]
数组长度: n = 9
┌─────────────────────────────────────────────────────────────┐
│ 第1轮: gap = 4 │
└─────────────────────────────────────────────────────────────┘
原始状态: [8, 3, 5, 2, 9, 1, 6, 4, 7]
分组排序:
第0组(索引0,4,8): [8, 9, 7] → 排序后: [7, 8, 9]
第1组(索引1,5): [3, 1] → 排序后: [1, 3]
第2组(索引2,6): [5, 6] → 排序后: [5, 6]
第3组(索引3,7): [2, 4] → 排序后: [2, 4]
本轮结果: [7, 1, 5, 2, 8, 3, 6, 4, 9]
↑ ↑ ↑ ↑
已比 已比 已比 已比
较好 较好 较好 较好
┌─────────────────────────────────────────────────────────────┐
│ 第2轮: gap = 2 │
└─────────────────────────────────────────────────────────────┘
状态: [7, 1, 5, 2, 8, 3, 6, 4, 9]
分组排序:
第0组(索引0,2,4,6,8): [7, 5, 8, 6, 9] → 排序后: [5, 6, 7, 8, 9]
第1组(索引1,3,5,7): [1, 2, 3, 4] → 排序后: [1, 2, 3, 4]
本轮结果: [5, 1, 6, 2, 7, 3, 8, 4, 9]
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
更 加 有 序
┌─────────────────────────────────────────────────────────────┐
│ 第3轮: gap = 1 (标准插入排序) │
└─────────────────────────────────────────────────────────────┘
状态: [5, 1, 6, 2, 7, 3, 8, 4, 9]
此时数组已经基本有序,插入排序效率很高
插入排序过程:
i=1: key=1, 插入位置0 → [1, 5, 6, 2, 7, 3, 8, 4, 9]
i=2: key=6, 插入位置2 → [1, 5, 6, 2, 7, 3, 8, 4, 9] (不移动)
i=3: key=2, 插入位置1 → [1, 2, 5, 6, 7, 3, 8, 4, 9]
i=4: key=7, 插入位置4 → [1, 2, 5, 6, 7, 3, 8, 4, 9] (不移动)
i=5: key=3, 插入位置2 → [1, 2, 3, 5, 6, 7, 8, 4, 9]
i=6: key=8, 插入位置6 → [1, 2, 3, 5, 6, 7, 8, 4, 9] (不移动)
i=7: key=4, 插入位置3 → [1, 2, 3, 4, 5, 6, 7, 8, 9]
i=8: key=9, 插入位置8 → [1, 2, 3, 4, 5, 6, 7, 8, 9] (不移动)
最终结果: [1, 2, 3, 4, 5, 6, 7, 8, 9]