八大排序算法总结

来源:互联网 发布: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)



















0 0
原创粉丝点击