计数排序C语言代码

来源:互联网 发布:淘宝店铺 花呗 编辑:程序博客网 时间:2024/06/05 20:30
#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;}