内部排序算法 http://blog.csdn.net/nixun/archive/2005/10/04/495186.aspx
2009-12-11 11:24
253 查看
1、起泡排序
算法:核心思想是扫描数据清单,寻找出现乱序的两个相邻的项目。当找到这两个项目后,交换项目的位置然后继续扫描。重复上面的操作直到所有的项目都按顺序排好
2、直接插入排序
算法:经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L[i]插入L[1..i-1]的适当位置,使得L[1..i]又是排好序的序列。要达到这个目的,我们可以用顺序比较的方法。首先比较L[i]和L[i-1],如果L[i-1]≤ L[i],则L[1..i]已排好序,第i遍处理就结束了;否则交换L[i]与L[i-1]的位置,继续比较L[i-1]和L[i-2],直到找到某一个位置j(1≤j≤i-1),使得L[j] ≤L[j+1]时为止
3、简单选择排序
算法:首先找到数据清单中的最小的数据,然后将这个数据同第一个数据交换位置;接下来找第二小的数据,再将其同第二个数据交换位置,以此类推。
4、快速排序
算法:首先检查数据列表中的数据数,如果小于两个,则直接退出程序。如果有超过两个以上的数据,就选择一个分割点将数据分成两个部分,小于分割点的数据放在一组,其余的放在另一组,然后分别对两组数据排序。
通常分割点的数据是随机选取的。这样无论你的数据是否已被排列过,你所分割成的两个字列表的大小是差不多的。而只要两个子列表的大小差不多
5. 堆排序
(1) 基本思想:
堆排序是一树形选择排序,在排序过程中,将R[1..N]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小的元素。
(2) . 堆的定义: N个元素的序列K1,K2,K3,...,Kn.称为堆,当且仅当该序列满足特性:
Ki≤K2i Ki ≤K2i+1(1≤ I≤ [N/2])
(1)若n较小(如n≤50),可采用直接插入或直接选择排序。
当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。
算法:核心思想是扫描数据清单,寻找出现乱序的两个相邻的项目。当找到这两个项目后,交换项目的位置然后继续扫描。重复上面的操作直到所有的项目都按顺序排好
2、直接插入排序
算法:经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L[i]插入L[1..i-1]的适当位置,使得L[1..i]又是排好序的序列。要达到这个目的,我们可以用顺序比较的方法。首先比较L[i]和L[i-1],如果L[i-1]≤ L[i],则L[1..i]已排好序,第i遍处理就结束了;否则交换L[i]与L[i-1]的位置,继续比较L[i-1]和L[i-2],直到找到某一个位置j(1≤j≤i-1),使得L[j] ≤L[j+1]时为止
3、简单选择排序
算法:首先找到数据清单中的最小的数据,然后将这个数据同第一个数据交换位置;接下来找第二小的数据,再将其同第二个数据交换位置,以此类推。
4、快速排序
算法:首先检查数据列表中的数据数,如果小于两个,则直接退出程序。如果有超过两个以上的数据,就选择一个分割点将数据分成两个部分,小于分割点的数据放在一组,其余的放在另一组,然后分别对两组数据排序。
通常分割点的数据是随机选取的。这样无论你的数据是否已被排列过,你所分割成的两个字列表的大小是差不多的。而只要两个子列表的大小差不多
5. 堆排序
(1) 基本思想:
堆排序是一树形选择排序,在排序过程中,将R[1..N]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小的元素。
(2) . 堆的定义: N个元素的序列K1,K2,K3,...,Kn.称为堆,当且仅当该序列满足特性:
Ki≤K2i Ki ≤K2i+1(1≤ I≤ [N/2])
(1)若n较小(如n≤50),可采用直接插入或直接选择排序。
当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。
相关文章推荐
- [转] 在ASP.NET下用Microsoft Excel进行数据分析与报表(ASP.Net)[http://blog.csdn.net/hoker_long/archive/2004/09/21/112470.aspx]
- 数据库隔离级别 (转自http://blog.csdn.net/enlicliu/archive/2009/02/23/3930499.aspx)
- ant 介绍 http://blog.csdn.net/sunjavaduke/archive/2007/03/08/1523819.aspx
- Windows消息产生的时机 http://blog.csdn.net/Free_Sword/archive/2006/05/07/711158.aspx
- Silverlight 3 - MultiThreading编程---http://blog.csdn.net/zjfei/archive/2009/07/27/4384428.aspx
- Android开发指南-框架主题-资源和资产 (转http://blog.csdn.net/iefreer/archive/2009/09/06/4526004.aspx)
- http://blog.csdn.net/liranke/archive/2009/10/29/4740844.aspx
- java中的数组与集合的排序---摘抄自:http://blog.csdn.net/jonathan_q_bo/archive/2005/11/29/539043.aspx
- 程序员的十层楼(http://blog.csdn.net/xjbx/archive/2009/02/08/3869314.aspx)
- http://blog.csdn.net/jsphuang/archive/2005/02/18/292907.aspx
- vs2005使用记趣(引用于http://blog.csdn.net/flyingjsj/archive/2008/08/02/2756496.aspx)
- elf文件格式http://blog.csdn.net/coutcin/archive/2006/08/15/1065433.aspx
- http://blog.csdn.net/winneraqun/archive/2009/09/11/4542017.aspx
- 小议static(转自http://blog.csdn.net/hustli/archive/2003/08/03/19384.aspx)
- MTK task (原文 http://blog.csdn.net/yanwuxufeng/archive/2010/07/24/5762361.aspx)
- http://blog.csdn.net/crykeice/archive/2006/04/18/668384.aspx
- 5、jqGrid 3.6.2 中文文档——BasicGrid(3)http://blog.csdn.net/homez/archive/2010/07/29/5773675.aspx
- http://blog.csdn.net/chenyusiyuan/archive/2010/03/26/5418233.aspx
- CImageList使用指南(http://blog.csdn.net/panfei10000/archive/2006/12/21/1452278.aspx)
- 创建一个filter实例(transform filter)【转载http://blog.csdn.net/captain_x/archive/2007/08/10/1737619.aspx】