排序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;
}
对比下一下,然后看看程序二的输出结果,很有意思哦。后缀数组里会用到哦,这是一种算法思想!

posted on 2012-03-28 17:28  江财小子  阅读(137)  评论(0编辑  收藏  举报