根据《算法导论》第八章算法实现下面函数,详见《算法导论》第八章计数排序,程序可运行:
#include <STDLIB.H>
#include <STDIO.H>
#include <MALLOC.H>
#include <STRING.H>
/********************************************************
* 函数名: void COUNTING_SORT(int A[],int length,int k)
* 函数功能:计数排序.
* 输入参数:int A[]为需要排序的数组,int length数组的长度,int k数组里的数范围为0到k之间.
* 输出参数:void
* 附加说明:.
* 作者:YL
* 当前版本: v_1
* 完成日期: 2014-04-23
/********************************************************/
void COUNTING_SORT(int A[],int length,int k)
{
int *C,*B;
int i,j;
C=(int *)malloc(sizeof(int)*(k+1));
//for(i=0;i<=k;i++)
// C[i]=0;
memset(C,0,sizeof(int)*(k+1));
/*假设输入的数均是0到k之间的数,则C[i]中放置的是A中值为i的数的个数.*/
for(j=0;j<length;j++)
C[A[j]]=C[A[j]]+1;
/*C[i]中现在放置的是比i小或等于i的元素的个数*/
for(i=1;i<=k;i++)
C[i]=C[i]+C[i-1];
B=(int *)malloc(sizeof(int)*length);
for (j=0;j<length;j++)
{
B[C[A[j]]-1]=A[j];
C[A[j]]=C[A[j]]-1;
}
for(i=0;i<length;i++)
A[i]=B[i];
free(C);
free(B);
}