分布计数法排序
#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"); }