跳过正文
  1. Docs/

计数排序

·174 字·1 分钟· loading · loading · · ·
Algorithms C/C++ Sorting
Pacyu
作者
Pacyu
程序员
目录

简介
#

计数排序是一种空间换时间的排序算法。通常用作 基数排序的子过程。

参考文献
#

  1. Counting sort - wikipeida
  2. 计数排序 - 百度百科
  3. Counting sort - geeksforgeeks

算法实现
#

#include <iostream>
using namespace std;
const int MAXN = 100000;
const int k = 1000;
int a[MAXN], c[MAXN], ranked[MAXN];
int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; ++i)
    {
        cin >> a[i];
        ++c[a[i]];
    }
    for (int i = 1; i < k; ++i)
        c[i] += c[i - 1];
    for (int i = n - 1; i >= 0; --i)
        ranked[--c[a[i]]] = a[i];
    for (int i = 0; i < n; ++i)
        cout << ranked[i] << ' ';
    return 0;
}

算法分析
#

  • 时间复杂度 \( O(n + k) \)

  • 空间复杂度 \( O(n + k) \)

相关文章

矩阵运算
·4964 字·10 分钟· loading · loading
Algorithms Mathematical Math C/C++
这篇主要介绍一些矩阵运算相关算法。 矩阵乘法 # 矩阵相乘:\( C
Kruskal's algorithm
·456 字·1 分钟· loading · loading
Algorithms C/C++
Kruskal算法可用来求解最小生成树(minimum-sp
Tarjan's algorithm
·950 字·2 分钟· loading · loading
Algorithms C/C++
Tarjan算法可以用来求有向图的强连通分量个数。算法由Ro
拓扑排序
·681 字·2 分钟· loading · loading
Algorithms C/C++
生活中许多实际应用都需要使用有向无环图来指明事件的优先次序。
Kosaraju's algorithm
·890 字·2 分钟· loading · loading
Algorithms C/C++
该算法可以用来求解一个有向图的强连通分量。 算法解析 # 什么是强
牛顿法(Newton's method)
·961 字·2 分钟· loading · loading
Algorithms Mathematical C/C++ Math
牛顿法也是数值分析中很常见的算法了。嘛,网上对它的各种介绍也