- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构
主讲人:陈红丽
知识点回顾
衡量排序算法的标准
时间复杂度
空间复杂度
稳定性
插入类排序
直接插入排序(顺序查找)
折半插入排序
希尔排序(增量递增)
交换类排序
冒泡排序
快速排序
第20讲
8.4 选择排序
基本思想:
每一趟在后面 n-i +1个中选出关键码最小的对象, 作为有序序列的第 i 个记录
简单选择排序
简单选择排序
算法分析
时间复杂度:O(n2)
空间复杂度:O(1)
方法是稳定的;本实现是不稳定的。
移动次数
最好情况:0
最坏情况:3(n-1)
树形选择排序
排序思想:首先取得 n 个对象的关键码,进行两两比较,得到?n/2 ?个比较的优胜者(关键码小者),作为第一步比较的结果保留下来。然后对这 ?n/2 ?个对象再进行关键码的两两比较,…,如此重复,直到选出一个关键码最小的对象为止。又称为锦标赛排序。
13
38
13
97
38
65
49
38
76
13
13
27
65
27
49
选出冠军的过程:(比较次数=n-1)
13
97
49
38
76
13
65
27
49
∞
27
38
27
38
65
76
27
选出亚军的方法:将冠军值改为∞,然后从该叶子结点开始,和其左(或右)兄弟的关键字进行比较,修改从叶子结点到根的路径上各结点的关键字,则根结点的关键字记为次小值。 (比较次数=log2n)
27
27
49
27
27
13
∞
38
49
49
算法分析
除第一次选择具有最小关键码的对象需要进行 n-1 次关键码比较外,选择具有次小、再次小等等关键码对象所需的比较次数均为 O(log2n)。总关键码比较次数为O(nlog2n)。
对象的移动次数不超过关键码的比较次数,故锦标赛排序总的时间复杂度为O(nlog2n)
这种排序方法虽然减少了许多排序时间,但是使用了较多的附加存储O(n)。
n个元素的序列{k1,k2,…,kn},当且仅当满足下列关系时,成为堆:
堆排序
什么是堆?
如果将序列看成一个完全二叉树,非终端结点的值均小于或大于左右子结点的值。
(87,78,53,45,65,09,31,17,23)
堆顶元素(根)为最小值或最大值
(09,17,65,23,45,78,87,53,31)
利用树的结构特征来描述堆,所以树只是作为堆的描述工具,堆实际是存放在线性空间中的。
小根堆
大根堆
×
判定(80,75,40,62,73,35,28,50,38,25,47,15)是否为堆
完全二叉树
堆是一种数据结构,( )是堆。
A.(10,50,80,30,60,20,15,18)
B.(10,18,15,20,50,80,30,60)
C.(10,15,18,50,80,30,60,20)
D.(10,30,60,20,15,18,50,80)
( )从二叉树的任一结点出发到根的路径上,所经过的结点序列必按其关键字降序排列。
A.二叉排序树 B.大顶堆
C.小顶堆 D.平衡二叉树
B
C
将无序序列建成一个堆
输出堆顶的最小(大)值
使剩余的n-1个元素又调整成一个堆,则可得到n个元素的次小值
重复执行,得到一个有序序列
堆排序
基本思想:
如何建??
如何调整??
60
2
40
4
8
3
12
6
[ 1 ]
[ 2 ]
[ 3 ]
[ 4 ]
[ 5 ]
[ 6 ]
[ 7 ]
30
60
8
40
70
12
10
如何将无序序列建成堆
思考:有n 个结点的完全二叉树,最后一个分支结点的标号是多少?
?n/2?
60
2
40
4
12
3
8
6
[ 1 ]
[ 2 ]
[ 3 ]
[ 4 ]
[ 5 ]
[ 6 ]
[ 7 ]
70
60
12
40
30
8
10
60
2
40
4
[ 1 ]
[ 2 ]
[ 3 ]
[ 4 ]
[ 5 ]
[ 6 ]
[ 7 ]
30
60
8
40
70
12
10
无序序列建成堆-1
8
12
3
6
60
2
40
4
12
8
[ 1 ]
[ 2 ]
[ 3 ]
[ 4 ]
[ 5 ]
[ 6 ]
[ 7 ]
30
60
12
40
70
8
10
无序序列建成堆-1
3
6
60
40
4
12
文档评论(0)