希尔排序

希尔排序(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]))
posted @ 2025-07-09 16:41  胡啊花瓜  阅读(16)  评论(0)    收藏  举报