zoukankan      html  css  js  c++  java
  • 计数排列(模板)

    有一种排序叫做计数排序(它是与桶排序不同的),虽然它们的时间复杂度都是O(n),但是计数排序比桶排序更稳定....

    下面就根据代码看一下计数排序的模板以及其原理:

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 int n,z[100],cnt[100],m;
     5 int main()
     6 {
     7     scanf("%d",&n);
     8     for (int a=1;a<=n;a++)
     9     {
    10         scanf("%d",&z[a]);
    11         cnt[z[a]] += 1;//注意cnt为一个用来计数的数组,z[a]可视为一个数,所以cnt++,表示z[a]共有多少个 
    12         m =max(m,z[a]);//m等于m和z[a]中较大的一个数,记录最大值是为了第15行的for循环 
    13     }
    14     n=0;//在这里将n初始化 
    15     for (int a=0;a<=m;a++)/*m为这一些数据中的最大值,从0开始的原因是数据中可能有0,
    16     在16行中,a充当了z[a]的角色,为输入的数据,输入数据只能在0到最大值m之间*/ 
    17          for (int b=1;b<=cnt[a];b++)//枚举a出现的次数,并将所有的a都加入到数组中 
    18         {
    19             n++;
    20             z[n] = a;//n++后将a储存到z数组中
    21         }
    22     for (int a=1;a<=n;a++)
    23         printf("%d
    ",z[a]);//将排好的z数组进行输出 
    24 } 

    注意:在计数排序中,一般最大可适用于10^6的数据.....

  • 相关阅读:
    Luogu 3119 [USACO15JAN]草鉴定Grass Cownoisseur
    Luogu 4514 上帝造题的七分钟
    Luogu 1484 种树
    Luogu【P2904】跨河(DP)
    Luogu【P2065】贪心的果农(DP)
    Luogu【P1725】琪露诺(单调队列,DP)
    二分图匹配
    单调队列
    Tarjan的强联通分量
    手写堆
  • 原文地址:https://www.cnblogs.com/New-ljx/p/10345421.html
Copyright © 2011-2022 走看看