计数排序

#include<stdio.h>
void CountingSort(int *arrA,int *arrB,int k,int length)
{
     int c[k+1];
     memset(c,0,sizeof(c));
     int i=1;
     for(;i<=length;i++)
     {
         c[arrA[i]]=c[arrA[i]]+1;
     }
     
     i=1;
     for(;i<=k;i++)
     {
         c[i]=c[i-1]+c[i];
     }
     
     i=length;
     for(;i>=1;i--)
     {
         arrB[c[arrA[i]]]=arrA[i];
         c[arrA[i]]=c[arrA[i]]-1;
     }
}

int main()
{
    int arrA[]={0,12,44,0,2,3,24,5,23,56,32,45,5,5,0,45,64};
    int length=sizeof(arrA)/sizeof(arrA[0])-1;
    int max=arrA[1];
    int i=1;
    for(;i<=length;i++)
    {
        if(arrA[i]>max)
        max=arrA[i];
    }
    
    int k=max;
    
    int arrB[length+1];
    CountingSort(arrA,arrB,k,length);
    
    i=1;
    for(;i<=length;i++)
    printf("%d ",arrB[i]);
    system("pause");
    return 0;
}

posted @ 2013-09-14 10:39  liguigen  阅读(178)  评论(0编辑  收藏  举报