algoalgo-world
algoalgo-world/sort/slow-sort
sort/slow-sort

慢速排序

最好
n^O(log n)
平均
n^O(log n)
最坏
n^O(log n)
空间
O(n)
稳定性
不稳定
方式
比较

选一种语言就能看到代码

def slow_sort(a, lo, hi):
    if lo >= hi:
        return
    mid = (lo + hi) // 2
    slow_sort(a, lo, mid)
    slow_sort(a, mid + 1, hi)
    if a[mid] > a[hi]:
        a[mid], a[hi] = a[hi], a[mid]
    slow_sort(a, lo, hi - 1)
function slowSort(a, lo, hi) {
  if (lo >= hi) return;
  const mid = (lo + hi) >> 1;
  slowSort(a, lo, mid);
  slowSort(a, mid + 1, hi);
  if (a[mid] > a[hi]) [a[mid], a[hi]] = [a[hi], a[mid]];
  slowSort(a, lo, hi - 1);
}
static void swap(int a[], int i, int j) {
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
}

void slow_sort(int a[], int lo, int hi) {
    if (lo >= hi) return;
    int mid = (lo + hi) / 2;
    slow_sort(a, lo, mid);
    slow_sort(a, mid + 1, hi);
    if (a[mid] > a[hi]) swap(a, mid, hi);
    slow_sort(a, lo, hi - 1);
}
void slow_sort(std::vector<int>& a, int lo, int hi) {
    if (lo >= hi) return;
    int mid = (lo + hi) / 2;
    slow_sort(a, lo, mid);
    slow_sort(a, mid + 1, hi);
    if (a[mid] > a[hi]) std::swap(a[mid], a[hi]);
    slow_sort(a, lo, hi - 1);
}
static void SlowSort(int[] a, int lo, int hi) {
    if (lo >= hi) return;
    int mid = (lo + hi) / 2;
    SlowSort(a, lo, mid);
    SlowSort(a, mid + 1, hi);
    if (a[mid] > a[hi]) (a[mid], a[hi]) = (a[hi], a[mid]);
    SlowSort(a, lo, hi - 1);
}
static void swap(int[] a, int i, int j) {
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
}

static void slowSort(int[] a, int lo, int hi) {
    if (lo >= hi) return;
    int mid = (lo + hi) / 2;
    slowSort(a, lo, mid);
    slowSort(a, mid + 1, hi);
    if (a[mid] > a[hi]) swap(a, mid, hi);
    slowSort(a, lo, hi - 1);
}
先跑一遍,再读源码