好久没发博客了,今天更新一波,来个计数排序。
请编写一个程序,输入数列A,通过计数排序算法将A按升序排列并输出。(数列元素都非负)
输入:第1行输入数列A长度的整数n。第二行输入n个整数,以空格隔开。
输出:在1行内输出排序后的数列。相邻元素用1个空格隔开。
代码如下:
//只要输入数组A从末尾元素开始选择,计数排序就属于稳定的排序算法
#include<stdio.h>
#include<stdlib.h>
#define MAX 2000001
#define VMAX 10000
int main() {
unsigned short *A,*B;
int C[VMAX+1];
int n,i,j;
scanf("%d",&n);
A=(unsigned short*)malloc(sizeof(short)*n+1);
B=(unsigned short*)malloc(sizeof(short)*n+1);
for(i=0; i<=VMAX; i++)C[i]=0;
for(i=0; i<n; i++) {
scanf("%hu",&A[i+1]);
C[A[i+1]]++;
}
for(i=1; i<=VMAX; i++) {
C[i]=C[i]+C[i-1];
}
for(j=n; j>=1; j--) {
B[C[A[j]]]=A[j];
C[A[j]]--;
}
for(i=1; i<=n; i++) {
if(i>1)printf(" ");
printf("%d",B[i]);
}
printf("\n");
return 0;
}
测试结果: