• 计数排列(模板)


    有一种排序叫做计数排序(它是与桶排序不同的),虽然它们的时间复杂度都是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的数据.....

  • 相关阅读:
    C语言练习之计算某年日是该年的第几天
    C语言练习之 猴子吃桃问题
    C语言练习之 求阶乘
    C语言学习(四)
    C语言学习(三)
    C语言学习(二)
    C语言学习(一)
    自定义函数汇总
    #2019121200026 最大子序列和
    #2019121000025-LGTD
  • 原文地址:https://www.cnblogs.com/New-ljx/p/10345421.html
Copyright © 2020-2023  润新知