#include<stdio.h>
#include<stdlib.h>
int maximum(int *A);
int * counting_sort(int *A);
int get_length(int *A);
int main()
{
int i;
int A[100]={6,45,9,46,4,3,23};
int *sorted=counting_sort(A);
for(i=1;i<get_length(A);i++)
printf("%6d",sorted[i]);
free(sorted);
return 1;
}
int * counting_sort(int *A)
{
int i,m,len,*c,*b;
m=maximum(A);
len=get_length(A);
c=(int *)malloc(sizeof(int)*(m+1)); //建立一个辅助数组,存储计数信息
b=(int *)malloc(sizeof(int)*(len+1)); //用于存放排好序的数组
for(i=0;i<=m;i++)
c[i]=0;
for(i=0;i<len;i++) //A[i]作为下标,将对应的c数组置位
c[A[i]]++;
for(i=1;i<=m;i++)
c[i]=c[i]+c[i-1]; //c[A[i]]中存储了小于或等于A[i]的元素的个数
for(i=0;i<len;i++)
{
b[c[A[i]]]=A[i];
c[A[i]]--;
}
free(c);
return b;
}
int maximum(int *A)
{
int i=0,m;
m=A[0];
while(A[i]!='\0')
{
if(A[i]>m) m=A[i];
i++;
}
return m;
}
int get_length(int *A)
{
int len=0;
while(A[len]!='\0')
len++;
return len;
}
计数排序C语言代码
最新推荐文章于 2023-12-07 14:33:12 发布