在这里插入图片描述
#include<stdio.h>
void countsort(int a[],int b[],int k)
{
int c[10]={0};
int i,n;
n=8;
for(i=0;i<n;i++)
c[a[i]]++;
for(i=0;i<k+1;i++)
printf("%3d",c[i]);
printf("\n");
for(i=1;i<k+1;i++)
c[i]+=c[i-1];
for(i=0;i<k+1;i++)
printf("%3d",c[i]);
printf("\n");
for(i=n-1;i>=0;i--)
{
b[c[a[i]]-1]=a[i];
c[a[i]]--;
}
for(i=0;i<n;i++)
printf("%3d",b[i]);
}
int main()
{
int a[8]={2,5,3,0,2,3,0,3};
int b[8]={0};
int i,k;
k=0;
for(i=0;i<7;i++)
{
if(a[i]>k)
k=a[i];
}
printf("%d\n",k);
countsort(a,b,k);
}
对元素x确定比它小的元素个数,将x插在之后。
但由于可能存在重复,于是我们建立一个数组c[k]用来存放元素n的个数k的值为A数组中最大的数。
然后第一个重复的数插入后,后面和它重复的依次往前插。