希尔排序
希尔排序(Shell Sort)->筛沙机
希尔排序是插入排序的优化版本,通过分组增量排序逐步缩小数据规模
希尔排序是不稳定排序
初始沙堆:[9,7,5,3,1,8,6,4,2]
▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂
第1层筛子(孔距=4)→ [9,1] [7,8] [5,6] [3,4,2]
▼▼ 筛出小颗粒前移
[1,9] [7,8] [5,6] [2,3,4] → 新沙堆 [1,7,5,2,9,8,6,3,4]
第2层筛子(孔距=2)→ [1,5,9,6,4] [7,2,8,3]
▼▼ 精细筛选
[1,4,5,6,9] [2,3,7,8] → 新沙堆 [1,2,4,3,5,7,6,8,9]
第3层筛子(孔距=1)→ 整体过筛
▼▼ 终极过滤
[1,2,3,4,5,6,7,8,9] → 完美排序!
与其他排序算法对比
| 特性 | 希尔排序 | 插入排序 | 快速排序 |
|---|---|---|---|
| 时间复杂度 | O(n^1.3~n²) | O(n²) | O(n log n) |
| 稳定性 | ❌ 不稳定 | ✅稳定 | ❌ 不稳定 |
| 最佳场景 | 中等规模、部分有序数据 | 小规模或基本有序 | 大规模随机数据 |
Python版代码:
def shell_sort(arr):
n = len(arr) # 获取列表长度
gap = n // 2 # 初始增量设为数组长度的一半
while gap > 0:
for i in range(gap, n): # 从gap位置开始遍历
temp = arr[i] # 保存当前待插入元素
j = i
while j >= gap and arr[j - gap] > temp: # 大小比较条件
arr[j] = arr[j - gap] # 大元素后移
j -= gap
arr[j] = temp #插入正确位置
gap = gap // 2 #增量减半
return arr
print(shell_sort([55,662,11,5,34,88,999]))

浙公网安备 33010602011771号