排序4之计数排序

程序一:

#include <stdio.h>
#include <string.h>
#define M 10001  //看完程序后想想这个M干嘛用的,可以去看看哈希算法噢
#define N 10
int main()
{
    int a[N],b[M];
    int i,n;
    memset(b,0,sizeof(b));
    for(i=0;i<N;i++)
      {
          scanf("%d",&n);b[n]++;
      }
    for(i=0;i<M;i++)
      while(b[i]--)
        printf("%d ",i);
    return 0;
}
程序二:

#include <stdio.h>
#include <string.h>
#define M 10001
#define N 10
int main()
{
    int a[N],b[M];
    int i,n;
    memset(b,0,sizeof(b));
    for(i=0;i<N;i++)
      {
          scanf("%d",&n);b[n]++;
      }
    for(i=1;i<M;i++)
      b[i]+=b[i-1];
    for(i=N-1;i>=0;i--)
      a[b[i]--]=i+1;
    for(i=1;i<=N;i++)
      printf("%d ",a[i]);
    return 0;
}
对比下一下,然后看看程序二的输出结果,很有意思哦。后缀数组里会用到哦,这是一种算法思想!

原文地址:https://www.cnblogs.com/372465774y/p/2421628.html