文章目录
- 3.排序算法复杂度及稳定性分析
- 4.选择题练习
- 1. 快速排序算法是基于( )的一个排序算法。
- 2.对记录(54,38,96,23,15,72,60,45,83)进行从小到大的直接插入排序时,当把第8个记录45插入到有序表时,为找到插入位置需比较( )次?(采用从后往前比较)
- 3.以下排序方式中占用O(n)辅助存储空间的是
- 4.下列排序算法中稳定且时间复杂度为O(n2)的是( )
- 5.关于排序,下面说法不正确的是
- 6.下列排序法中,最坏情况下时间复杂度最小的是( )
- 7.设一组初始记录关键字序列为(65,56,72,99,86,25,34,66),则以第一个关键字65为基准而得到的一趟快速排序结果是()
- 8.在待排序数据已有序时,花费时间反而最多的是( )排序。
- 9.下面的排序算法中,初始数据集的排列顺序对算法的性能无影响的有( )
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(N1.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.②③⑤⑥
快排
: 初始顺序影响较大,有序是,性能最差
插入
: 接近有序,性能最好
希尔
:希尔是对插入排序的优化,这种优化是在无序的序列中才有明显的效果,如果序列接近有序,反而是插入最优。
堆排,归并,选择
对初始顺序不敏感