只需借助一个一维数组,对一组数进行简单的桶排序。
实现:
①初始化一维数组(10个元素),每个元素对应的下标用来记录 0-9 以内待排序数字出现的次数,如a[5]=3, 代表5数字出现了3次,a[2]=0, 代表2数字出现了0次;
②录入要排序的一组数字,每一个数字对应数组下标,用该数组元素记录出现的次数;
③打印每个数组的下标,数组元素存放的数据即为待排序的数的出现次数。
#include<stdio.h>
int main()
{
int a[10];
int i, j;
for(i=0; i<10; i++)
{
a[i] = 0;//初始化数组为零;
}
for(i=0; i<5; i++) //读取5个待排序的数
{
scanf("%d",t);
a[t]++; //进行计数
}
for(i=0; i<10; i++) //依次判断a[0]-a[9];
for(j=0; j<a[i]; j++)
printf("%d",i); //出现几次就打印几次
return 0;
}
可以对程序进行修改,设置你需要排序的数组最大范围,来申请数组大小。
复杂度问题:O(M+N); M为桶的个数(即申请的数组长度),N为待排序数的个数。所以该排序很快,但是缺点——浪费内存,无法排序小数。