啊哈!算法第一个实例之简易“桶排序(选自《啊哈!算法》一书)
来源:互联网 发布:淘宝投诉电话人工号码 编辑:程序博客网 时间: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)啊哈!算法
- 《啊哈!算法》
- 《啊哈!算法》
- 啊哈!算法
- poj 4022 ASCII Area dfs求二维面积
- centos升级高版本的GCC方法
- SVG矢量图及其制作工具
- 低版本升级HANA到SPS8及以上之前要处理的问题
- 李红霞作业第二章19题
- 啊哈!算法第一个实例之简易“桶排序(选自《啊哈!算法》一书)
- Huffman编码的C++高效实现
- css中position理解
- sql
- Cocos2d-x3.2 Sprite精灵类的创建与设置
- leetcode007:Reverse Integer
- Single Number II--LeetCode
- C学习过程
- C++ 老版本数组与新版本Array及Vector区别