您的位置:首页 > 其它

排序算法

2016-04-04 15:03 351 查看
1.      归并排序,时间复杂度是O(NlogN)

基本思想是将已经排序好的子序列做排序,归并为一个有序的大序列。(分治算法)。

2.      排序的稳定性:

一般说,如果排序过程中,只有相邻元素进行比较,是稳定的,如冒泡排序、归并排序(可以算作相邻元素比较);如果间隔元素进行比较,往往是非稳定的,如堆排序、快速排序。直接插入排序是稳定的;但是二分插入排序本身不稳定,如果要稳定,需要向后探测。对于不稳定排序可以使用(A[i],i)键对来进行算法,使得不稳定排序变为稳定排序。

3.      桶排序/基数排序

将元素分到若干个桶中,每个桶分别排序,然后归并

 

4.      计数排序,时间复杂度为O(N)。空间复杂度为O(N+K)

用空间换时间,本质是建立基于元素的hash表

建立一个辅助空间,记录每个原始数据出现的次数,然后转换成前N项和数组。从后往前遍历原始数组到存放排序结果的新数组中。

5.      排序分类:内排序/外排序

常见排序方法:

插入排序/希尔排序

选择排序/锦标赛排序/堆排序

冒泡排序/快速排序

归并排序

基数排序

6.      堆排序

最大、最小堆只是要求父子结点满足比较关系。

先写一个递归函数维护堆,能够处理的情况是有一个堆结点不满足最大堆(或最小堆)的性质。然后写一个创建堆函数,利用维护堆函数,从堆的最后结点的二分之一那个结点开始到结点1调用维护堆函数进行建堆,然后把堆的第一个结点和最后一个结点交换,取出排序好的序列,实现堆排序。(把堆的顶元素放在下标为1的数组元素中方便写程序)。

堆排序的时间复杂度是O(NlogN),

7.      快速排序是O(NlogN),

采用分治算法,选择一个值作为Key

--------------------------------

排序算法的不稳定性:

假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: