Introduce to algorithm--------pseudo code to C/C++ code(Chapter 8)
来源:互联网 发布:mac版pdf虚拟打印机 编辑:程序博客网 时间:2024/05/17 04:04
计数排序:
顾名思义,基数排序的中心思想是“计数”。该排序算法需要额外的两组array分别来存储计数信息和输出信息。
算法概述如下: 算法计算每个元素出现的次数,将次数按元素大小顺序保存。然后将每个出现次数更改为包
含自身次数以前的所有次数和。所以若元素5的累计次数为8,则元素5的最后一个排序位置(可能有多个元素5)应
该在数组中下标为7的位置处。(0-based index)必须要提的一点是计数排序的前提是非常重要的,即:假设n个输
入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。(摘自算法导论)
举例:排序A[] = { 2,3,5,1 }
输出数组:B; 辅助数组: C
第一个for循环:
B[] = { ?,?,?,? }
C[5] = { 0,0,0,0,0 }
第二个for循环:
B[] = { ?,?,?,? }
C[] = { 0,1,1,1,0,1 }因为存在一个元素2,所以C[2]递增。其他元素一样处理。
第三个for循环:
B[] = { ?,?,?,? }
C[] = { 0,1,2,3,3,4 }累计所有当前出现次数之前的所有出现次数的累加值(包括当前次数),用于定位元素的正确排序位置
第四个for循环:
B[] = { 1,2,3,5 }
基数排序:
顾名思义,基数排序基于“基数”这个概念。如果说数值为10进制数,则这些数值的基数为10,若数值为8进制数,则基数
为8.核心思想是根据数据的每位上的数值大小进行排序。以下图片描述的很清楚(摘自算法导论):
桶排序:
算法概念以“桶”为中心。以下为“桶”的概念:桶排序假设输入是由一个随机过程产生,该过程将元素均匀、独立的分布在[0,1)
上,桶排序则将[0,1)划分为n个相同大小的子区间,称为桶。实际上,“桶”就是所有数据的一个块。桶排序分散在各个“桶”里进行。
但是输出各个桶排序后的数据时,只是简单的顺序遍历桶,所以在将数据分割成桶时,必须保证每个桶已按大小整体排序。
由于实际上的应用,多数情况下是将基数排序与桶排序相结合以获得良好的运行时间,当然,是以相应的空间代价换来的。由于
桶排序是稳定排序,即排序时保持数据的原有相对顺序,所以将桶排序应用在技术排序中是完全可行的。以下为基数排序代码(内部
以桶排序实现):
虽然出于代码复用的考虑用模板来实现了,但仅限于int,long等类似类型,不适用于unsigned,float等类型。还有,作为一个算法函数
而言,个人觉得应这样实现该是不推荐的。当时实现的时候自己太过关注代码的重用,并且有一部分是出于熟练模板的使用与设计。虚心请
球批评指正。
For more details, see Introduce to algorithm.
- Introduce to algorithm--------pseudo code to C/C++ code(Chapter 8)
- Introduce to algorithm-------pseudo code to C/C++ code(Chapter 2)
- Introduce to Algorithm--------pseudo code to C/C++ code(Chapter 4)
- Introduce to algorithm--------pseudo code to C/C++ code(Chapter 6)
- Introduce to algorithm--------pseudo code to C/C++ code(Chapter 7)
- Introduce to algorithm-----pseudo code to C/C++ code (chapter 11)
- Introduce to algorithm--------pseudo code to C/C++ code(chapter 12)
- Introduce to algorithm--------pseudo code to C/C++ code(chapter 13)
- Introduce to algorithm--------pseudo code to C/C++ code(chapter 15)
- Introduce to algorithm--------pseudo code to C/C++ code (chapter 16)
- Introduce to algorithm--------pseudo code to C/C++ code (chapter 18)
- Introduce to algorithm--------pseudo code to C/C++ code (chapter 23)
- Introduce to algorithm--------pseudo code to C/C++ code (chapter 24)
- C code to implement RSA Algorithm(Encryption and Decryption)
- Pre-IPL RAM Stage pseudo C code
- Introduction to Algorithm(chapter 8)
- How to study C && ASM Code(1)
- How to study C && ASM Code(2)
- Linux下C的编写和执行
- 制成U盘启动后U盘容量变小————解决办法!!!!
- 3D软引擎之三角形光栅化
- Searching: Chained Hash Table Search And Insertion-2
- android Animation动画介绍
- Introduce to algorithm--------pseudo code to C/C++ code(Chapter 8)
- 北京的第五个月
- 爱对了是爱情,爱错了是青春。
- Activity和Fragment交互
- 勤学如春起之苗,不见其增,日有所长;辍学如磨刀之石,不见其损,日有所亏。
- 在Linux 安装 oracle 11g
- 第七章 实现炫酷效果—图像和动画(6)
- 盛年不重来,一日难再晨。及时宜自勉,岁月不待人。
- Hadoop之——MapReduce实现从海量数字信息中获取最大值