八大排序算法总结
来源:互联网 发布:mysql 添加数据表字段 编辑:程序博客网 时间:2024/06/04 19:17
概述
在排序过程中,根据数据元素是否完全在内存中,可将排序算法分为两类:内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里只讨论内部排序。
各种排序算法的关系可由下图描述(出处http://blog.csdn.net/hguisu/article/details/7776068),由此我们可以把内部排序算法分为8种。
理解这些算法的最好方式就是举个例子,然后按照算法手动操作。
1.直接插入排序算法
2.希尔排序
3.简单选择排序
4.堆排序
以建立大根堆的算法为基础,我们可以写出堆排序算法
同时,堆也支持插入和删除的操作
5.冒泡排序
6.快速排序
从上面的代码中我们不难发现快速排序算法的关键在于划分操作,同时快速排序算法的性能也主要取决于划分操作的好坏。
快速排序的分治(partition)过程有两种方法。
1)两个下标分别从首尾向中间扫面的方法
假设每次总是以当前表中第一个元素为枢轴值(基准)对表进行划分,则必须将表中比枢轴值大的元素向右移动,比枢轴值小的元素向左移动,使得一趟Partition()之后,
表中的元素被枢轴值一分为二。
2)两个指针索引一前一后逐步向后扫描的方法
这种方法有一个特点,即一次划分之后,枢轴值左边的元素相对顺序不变,即这些元素保持在初始序列中的相对顺序,某些应用要求序列的一部分保持相对顺序,
这时可以考虑此种划分操作。
7.归并排序(二路归并)
递归形式的二路归并排序算法是基于分治的,其过程如下:
分解:将含有n个元素的待排序表分成各含n/2个元素的子表,采用二路归并排序算法对两个子表递归地进行排序。
合并:合并两个已排序的子表得到的排序结果。代码如下:
Merge()的功能是将前后相邻的两个有序表归并成一个有序表的算法。
这两段有序表A[low...mid]、A[mid+1...high] 放在同一顺序表中的相邻位置上,先将它们复制到辅助数组B中。每次从对应B中的两个段取出一个记录进行关键字的比较,将
较小者放入A中,当数组B中有一段比较完成时,将另一段中的剩余部分直接复制到A中。算法如下:
8.基数排序(出处http://www.cnblogs.com/jingmoxukong/p/4311237.html)
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 八大排序算法总结
- 快速幂模板
- Spring建立虚拟DB环境进行单测
- 在线 crc 校验
- 如何查找使用某变量的query
- 如何提升页面加载速度
- 八大排序算法总结
- thinpad安装win8.1&win7双系统
- wordpress wp_get_theme()主题函数
- pom.xml中的占位符
- 在Z-stack增加一个新的设备,如何添加源文件
- error LNK1104: 无法打开文件“OPENNI2_LIB.obj”
- adb简单操作
- FloatingActionButton滚动时的显示与隐藏
- Codeforces 639B Bear and Forgotten Tree 3 【构造】