关于排序的算法——桶排序
介绍:
桶排序是最简单最快的排序,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),
最后依次把各个桶中的记录列出来记得到有序序列。
时间复杂度:O(m+n)。
空间复杂度:O(n * k)
举个例子:(例子来源于啊哈算法)
期末考试完了老师要将同学们的分数按照从高到低排序。班上只有 5 个同学,这 5 个同学分别考了 5 分、 3 分、5 分、 2 分和 8 分,
(满分是 10 分)。接下来将分数进行从大到小排序,排序后是 8 5 5 3 2。你有没有什么好方法编写一段程序,让计算机随机读入 5 个数然后将这
5 个数从大到小输出?
解决方法:
按照分数创建一个大小为11的一维数组来表示分数,用数值来表示人数,在数组中表示这个分数相对应的人数
然后将桶对应的数打印出来。
代码如下:
int main() { int a[11],i,j,t; for(i=0;i<=10;i++) //循环11次 a[i]=0; //初始化为0 for(i=1;i<=5;i++) //循环读入5个数 通过键盘输入5个数 { scanf("%d",&t); //把每一个数读到变量t中 a[t]++; //进行计数 } for (i=0;i<=10;i++) //依次判断a[0]~a[10] 11次 for(j=1;j<=a[i];j++) //出现了几次就打印几次 printf("%d ",i);// 循环5次 getchar ();getchar(); //这里的getchar();用来暂停程序,以便查看程序输出的内容 //也可以用system("pause");等来代替 return 0; }
身体是1,财富·名利·是0,没有1有再多的0都没有用!!