algoalgo-world
algoalgo-world/sort/stalin-sort
sort/stalin-sort

斯大林排序

最好
O(n)
平均
O(n)
最坏
O(n)
空间
O(1)
稳定性
不适用
方式
比较

删掉的值不会回来,只有留下的才有序

选一种语言就能看到代码

def stalin_sort(values):
    kept = []
    for value in values:
        if not kept or value >= kept[-1]:
            kept.append(value)
    return kept
function stalinSort(values) {
  const kept = [];
  for (const value of values) {
    if (kept.length === 0 || value >= kept[kept.length - 1]) kept.push(value);
  }
  return kept;
}
int stalin_sort(int a[], int n) {
    if (n == 0) return 0;
    int kept = 1;
    for (int i = 1; i < n; i++) {
        if (a[i] >= a[kept - 1]) a[kept++] = a[i];
    }
    return kept;
}
std::vector<int> stalin_sort(const std::vector<int>& values) {
    std::vector<int> kept;
    for (int value : values) {
        if (kept.empty() || value >= kept.back()) kept.push_back(value);
    }
    return kept;
}
static List<int> StalinSort(int[] values) {
    var kept = new List<int>();
    foreach (int value in values) {
        if (kept.Count == 0 || value >= kept[kept.Count - 1]) kept.Add(value);
    }
    return kept;
}
static List<Integer> stalinSort(int[] values) {
    List<Integer> kept = new ArrayList<>();
    for (int value : values) {
        if (!kept.isEmpty() && value < kept.get(kept.size() - 1)) continue;
        kept.add(value);
    }
    return kept;
}
先跑一遍,再读源码