排序算法

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之前,则称这种排序算法是稳定的;否则称为不稳定的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值