#include <stdio.h>
//分布计数法排序
void DistributionCounting(int a[], int min, int max)
{
int n=6;
int D[6];//频率数组
int S[6];
int i,j,k;
for (i=0;i<n;i++)
{
D[i]=0;
}
//计算频率值
for (i=0;i<n;i++)
{
D[a[i]-min]++;
}
//重用与分布
for(j=1;j<=max-min;j++)
{
D[j]=D[j]+D[j-1];
}
//排序
for(i=n-1;i>=0;i--)
{
j=a[i]-min;
S[D[j]-1]=a[i];
D[j]=D[j]-1;
}
for (i=0;i<n-1;i++)
{
a[i]=S[i];
}
}
void main()
{
int num[6] = {13,11,12,13,12,12};
int i,min,max;
min=max=num[0];
printf("排序前输出\n");
for ( i = 0; i < 6; i++)
{
if(num[i]>max)
max=num[i];
if(num[i]<min)
min=num[i];
printf("%d ",num[i]);
}
printf("\n %d %d ",min ,max );
DistributionCounting(num, min, max);
printf("\n 排序后输出\n");
for (i = 0; i < 6; i++) {
printf("%d ",num[i]);
}
printf("\n");
}