啊哈!算法第一个实例之简易“桶排序(选自《啊哈!算法》一书)

来源:互联网 发布:淘宝投诉电话人工号码 编辑:程序博客网 时间:2024/05/16 00:56

今天读了一本啊哈大大写的算法书,《啊哈,算法》。在这之前对算法很是好奇,在学习数据结构的过程中接触过类似的排序算法,但这个“桶排序”算法确实是第一次见。虽然很简单,但我还是把它写出来,毕竟这是我的第一个博客,从简单写起。好了,废话不多说,下面让我们来看看所谓的简易版“桶排序”是什么东东吧!

问题描述:

假设期末考试完了,老师要将同学们的分数按高到低排序。班里只有五个同学,这五个同学分别考了5分,3分,5分,2分,和8分。接下来将分数进行从大到小进行排序,排序后是8 5 5 3 2 。编一个程序,读入5个数,实现从小到大的排序。

——————————————————————————————————————————————————————————————————————————————

话说我看到这个问题,脑海中首先想到的是冒泡排序和快速排序。可是能不能另辟新径呢?作者为我们提供了下面的算法,首先我们来看看吧。


//对5个数进行排序--桶排序的思想 #include <stdio.h>int main(){int a[11],i,j,t;for(i=0;i<=10;i++)a[i]=0;//将数组初始化为0; for(i=1;i<=5;i++)//循环读入五个数; {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();是用来暂停程序,以便查看程序输出的内容 getchar();return 0;} 


关于时间复杂度的分析:该算法的时间复杂度为O(M+N)。相对许多排序算法来说还是比较快的,可是我们不能忽视问题有两个:

1)假设分别有五个人的名字和分数,它们之间一一对应,要求按照分数的从高到低,输出他们的名字。则本算法失效(可参考快速排序等其他算法)。

2)桶排序算法所需的内存空间大,假设我们要对书号进行排序,每一本书对应唯一的ISBN号。如果每本图书的ISBN号为-2147483648~2147483247,则无法申请一个这么大的数组来标记每一个ISBN号,此时也无法使用桶排序算法。



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 牙齿里面的黄垢怎么办 牙齿长蛀牙有洞怎么办 牙齿空了洞疼痛怎么办 牙齿破了个洞怎么办 后牙齿有个大洞怎么办 大牙烂了个洞,痛怎么办 牙黑了有洞怎么办 牙齿内侧掉了一小块怎么办 龋坏的牙齿痛怎么办 2岁半宝宝蛀牙怎么办 3岁宝宝门牙腐蚀怎么办 2岁宝宝门牙有洞怎么办 三岁宝宝有龋齿怎么办 牙龈肿痛脸肿了怎么办 孕妇牙疼的厉害怎么办 智齿引起的牙疼怎么办 蛀牙了有个大洞牙痛怎么办 长了蛀牙牙疼怎么办 面饼表面长黑点怎么办 牙结石自己掉了怎么办 狗狗得了牙结石怎么办 牙结石掉了有洞怎么办 内衣的钩子会掉怎么办? 新胸罩肩带老掉怎么办 牙齿少了一小块怎么办 儿童牙齿有黑斑要怎么办 牙齿又黄又臭怎么办 大牙烂空了很臭怎么办 牙齿已经烂没了怎么办 牙齿已经蛀没了怎么办 牙齿整个蛀掉了怎么办 小孩恒牙长歪了怎么办 孩子换牙长歪了怎么办 9岁门牙磕松动了怎么办 牙齿摔断了一半怎么办 牙齿从根部断了怎么办 牙断了还有牙根怎么办 牙根断在牙龈里怎么办 后槽牙掉了一半怎么办 孩子门牙摔断了怎么办 2岁宝宝牙齿断了怎么办