algoalgo-world
algoalgo-world/sort/stooge-sort
sort/stooge-sort

臭皮匠排序

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

选一种语言就能看到代码

def stooge_sort(a, lo, hi):
    if a[lo] > a[hi]:
        a[lo], a[hi] = a[hi], a[lo]
    if hi - lo + 1 > 2:
        third = (hi - lo + 1) // 3
        stooge_sort(a, lo, hi - third)
        stooge_sort(a, lo + third, hi)
        stooge_sort(a, lo, hi - third)
function stoogeSort(a, lo, hi) {
  if (a[lo] > a[hi]) [a[lo], a[hi]] = [a[hi], a[lo]];
  if (hi - lo + 1 > 2) {
    const third = Math.floor((hi - lo + 1) / 3);
    stoogeSort(a, lo, hi - third);
    stoogeSort(a, lo + third, hi);
    stoogeSort(a, lo, hi - third);
  }
}
static void swap(int a[], int i, int j) {
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
}

void stooge_sort(int a[], int lo, int hi) {
    if (a[lo] > a[hi]) swap(a, lo, hi);
    if (hi - lo + 1 > 2) {
        int third = (hi - lo + 1) / 3;
        stooge_sort(a, lo, hi - third);
        stooge_sort(a, lo + third, hi);
        stooge_sort(a, lo, hi - third);
    }
}
void stooge_sort(std::vector<int>& a, int lo, int hi) {
    if (a[lo] > a[hi]) std::swap(a[lo], a[hi]);
    if (hi - lo + 1 > 2) {
        int third = (hi - lo + 1) / 3;
        stooge_sort(a, lo, hi - third);
        stooge_sort(a, lo + third, hi);
        stooge_sort(a, lo, hi - third);
    }
}
static void StoogeSort(int[] a, int lo, int hi) {
    if (a[lo] > a[hi]) (a[lo], a[hi]) = (a[hi], a[lo]);
    if (hi - lo + 1 > 2) {
        int third = (hi - lo + 1) / 3;
        StoogeSort(a, lo, hi - third);
        StoogeSort(a, lo + third, hi);
        StoogeSort(a, lo, hi - third);
    }
}
static void swap(int[] a, int i, int j) {
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
}

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