先来看一个问题:有一列(0~10)随机数 5 3 5 2 8 ,现在要求将它们按照从先到大的顺序或从大到小的顺序排列,如何去做?
在这里可以需借助一个一维数组就可以解决这个问题,首先申请一个大小为11 的数组int a[11]编
号从a[0]~a[10]。刚开始的时候,将a[0]~a[10]都初始化为0,然后进行这一列随机数的输入,将每一个数的数值对应到这个数组所对应的序号的数值加一,即
依次数组a的各个数值为:
接下来,需要将数组中出现过的数值不是0的数打印出来就可以了,出现几次就打印几次。
具体代码为:
#include <stdio.h>
#define M 11
int main(void)
{
int a[M],i,j,t;
for(i=0;i<=10;i++)
a[i]=0; //初始化为0
for(i=1;i<=5;i++) //循环读入5个数
{
scanf("%d",&t); //把每一个数读到变量t中
a[t]++; //进行计数
}
for(i=0;i<=10;i++) //依次判断a[0]~a[10]
for(j=1;j<=a[i];j++) //出现了几次就打印几次
printf("%d ",i);
getchar(); //这里的getchar();用来暂停程序,以便查看程序输出的内容
}
其实这并不是真正的桶排序算法,真正的桶排序算法要比这个更加复杂,期待以后的讲解!