梳排序

入门

理解"间隔缩小"如何将冒泡排序从 O(n²) 优化到接近 O(n log n)。

用你自己的数组跑一遍

AlgoAnim · 梳排序
速度
待机
// 源代码
1void combSort(int arr[], int n) {
2    int gap = n;
3    bool swapped = true;
4    while (gap > 1 || swapped) {
5        gap = max(1, (int)(gap / 1.3));
6        swapped = false;
7        for (int i = 0; i + gap < n; i++)
8            if (arr[i] > arr[i+gap]) { swap(arr[i], arr[i+gap]); swapped = true; }
9    }
10}

复杂度分析

时间 O(n²/2^p)
空间 O(1)
最优 O(n log n)
最坏 O(n²)

算法讲解

梳排序是冒泡排序的改进,初始间隔为数组长度,每轮缩小为原来的 1/1.3。

当间隔为 1 时,它就变成了冒泡排序。

使用缩减因子 1.3 可以在平均情况下达到 O(n²/2^p) 的性能。

它是理解"间隔排序"思想的好入口。