啃下大骨头——排序(三)

3.排序算法复杂度及稳定性分析

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

例子:
6 3 5 4 5 9 1
两个相同的值,如果排序之后红色的5依旧在蓝色的5前面,就是保证相对顺序不变,这就是稳定。

但稳定性只有在整型排序结构体中是有意义的

 
 

时间最坏时间最好空间稳定性
直接插入排序O(N^2)O(N)O(1)
希尔排序平均:O(N^1.3)平均:O(N^1.3)O(1)×
选择排序O(N^2)O(N^2)O(1)×
堆排序O(N*logN)O(N*logN)O(1)×
冒泡排序O(N^2)O(N)O(1)
快速排序O(N^2)O(N*logN)O(logN)×
归并排序O(N*logN)O(N*logN)O(1)

 
 

希尔排序为什么不稳定
因为预排的时候,相同的数据可能会被分到不同组里面去了

 
 
内部排序:数据元素全部放在内存中的排序。(以上说过的排序方法)
外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。(硬盘中)
归并不需要占用内存

 
 

4.选择题练习

1. 快速排序算法是基于( )的一个排序算法。

A分治法
B贪心法
C递归法
D动态规划法

将区间按照基准值划分为左右两半部分,然后再进行排序。所以是分而治之。

 
 

2.对记录(54,38,96,23,15,72,60,45,83)进行从小到大的直接插入排序时,当把第8个记录45插入到有序表时,为找到插入位置需比较( )次?(采用从后往前比较)

A 3
B 4
C 5
D 6

用直接插入的思想写一下思路,一开始没排到的数就先不写出来,以免混淆
38 54
38 54 96
23 38 54 96
15 23 38 54 96
15 23 38 54 72 96
15 23 38 54 60 72 96 此时45需要和这五个数进行对比,最后才发现比38大,比54小所以插入38与54之间

 
 

3.以下排序方式中占用O(n)辅助存储空间的是

A 简单排序
B 快速排序
C 堆排序
D 归并排序

需要先malloc一个第三方区间进行归并,之后会进行释放

 
 

4.下列排序算法中稳定且时间复杂度为O(n2)的是( )

A 快速排序
B 冒泡排序
C 直接选择排序
D 归并排序

还有直接插入排序

 
 

5.关于排序,下面说法不正确的是

A 快排时间复杂度为O(N*logN),空间复杂度为O(logN)
B 归并排序是一种稳定的排序,堆排序和快排均不稳定
C 序列基本有序时,快排退化成冒泡排序,直接插入排序最快
D 归并排序空间复杂度为O(N), 堆排序空间复杂度的为O(logN)

两个都应该是O(N^logN)

 
 

6.下列排序法中,最坏情况下时间复杂度最小的是( )

A 堆排序
B 快速排序
C 希尔排序
D 冒泡排序

堆排序 O(NlogN)
快速排序O(N^2)
希尔排序O(N
1.3)
冒泡排序O(N^2)

 
 

7.设一组初始记录关键字序列为(65,56,72,99,86,25,34,66),则以第一个关键字65为基准而得到的一趟快速排序结果是()

A 34,56,25,65,86,99,72,66
B 25,34,56,65,99,86,72,66
C 34,56,25,65,66,99,86,72
D 34,56,25,65,99,86,72,66

 
 

8.在待排序数据已有序时,花费时间反而最多的是( )排序。

A.堆排序
B.归并排序
C.希尔排序
D.快速排序

次序列接近有序,所以如果是插入排序,时间复杂度逼近O(n)
快排: 逼近O(n^2)
归并和堆排仍然是nlogn

 
 

9.下面的排序算法中,初始数据集的排列顺序对算法的性能无影响的有( )

① 快速排序

② 希尔怕徐

③ 插入排序

④ 堆排序

⑤ 归并排序

⑥ 选择排序

A.①④⑤
B.④⑤⑥
C.②③⑥
D.②③⑤⑥

快排: 初始顺序影响较大,有序是,性能最差
插入: 接近有序,性能最好
希尔:希尔是对插入排序的优化,这种优化是在无序的序列中才有明显的效果,如果序列接近有序,反而是插入最优。
堆排,归并,选择对初始顺序不敏感

  • 27
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 38
    评论
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hey pear!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值