废话不多说,先贴代码...看懂后,能明白最好.....
#include <stdio.h>
#include <string.h>
int x[100000];
int main()
{
int n; //保存需要排序的数字个数
int i; //用来记录数字
int max = 0; //保存最大的数字
scanf("%d",&n);
while(n--)
{
scanf("%d",&i);
if(max < i)
max = i;
x[i] += 1;
}
max += 1; //为了输出最大的值
while(max--)
{
if(x[max]!=0)
while(x[max]--)
printf("%4d",max);
}
printf("/n");
return 0;
}
思路很清晰,把数字保存到数组的脚标里面去.....
比如输出2,26,9....这样的话,x[2],x[26],x[9]的值全部是1,再根据循环从最大的脚标开始,所以自然先输出了26,然后是9,2....很明显,这样的排序速度是比较快的,只是进行了一轮赋值,然后遍历输出,没有进行实质的排序比较,运算量是比较小的.....
pS:水平有限,如有错误,请指出...
嘿嘿,现在发现个问题,由于惯性,使用了int数组,其实使用char数组可以节省空间.....