当前位置:网站首页>选择类排序法
选择类排序法
2022-06-24 19:43:00 【小段学长】
简单选择排序
基本思想
每趟选择一个关键字最小的记录作为当前要确定的记录。
算法思想
第一趟:选择一个关键字最小的记录,并和第一个记录交换。
第二趟:在剩余的序列中,选择一个关键字最小的记录,并和第二个记录交换。
重复共n-1趟即可完成排序。
第i趟,确定第i个记录
k为最值的下标
j为搜索的下标











算法分析
最好情况:有序,比较次数n(n-1)/2,移动次数0,时间复杂度为O(n2)。
最坏情况:第一个记录关键字最大,其余记录有序,比较次数n(n-1)/2,移动次数3(n-1),时间复杂度为O(n2)。
空间复杂度:O(1)。
稳定性:不稳定。
树形选择排序
算法改进要点
简单选择排序:从n个元素中找出关键字最小的记录需要比较n-1次。
从余下的n-1个记录中找出关键字次小的记录是否一定要n-2次比较呢?
改进:把比较过程中的大小关系保存下来。需要空间开销。
算法思想
先将待排序的n个记录的关键字两两比较,取出较小的,然后在选取出来的 n/2 个较小者中,再比较取小者,如此反复,直到选取最小的关键字为止。
为选取次小关键字,将最小关键记录所对应的叶子结点的关键字值置为∞,然后从该叶子结点开始和其兄弟结点的关键字比较,修改从该叶结点到根路径上各结点的值,则根结点的值为次小关键字。
选出最小关键字27



算法分析
设n个叶子记录,深度为h的满二叉树。
除选择最小关键字外,其余较小关键字的选取均需要比较h-1次,每选一个关键字的比较次数为 log2n 。
比较的时间复杂度为O(nlog2n)。
移动记录的次数不超过比较次数,故总的时间复杂度为O(nlog2n)。
空间复杂度为O(n)。增加了n-1个结点。
稳定性:稳定。当左右孩子相等时,优先左孩子,保证了优先关系不变。
堆排序
算法改进要点
树选排:辅助空间n-1个记录大小。
堆序:辅助空间1个记录大小。
堆的概念
完全二叉树以顺序表方式(数组方式)存储,各结点(即各记录)的关键字满足条件:r[i].key>=r[2i].key并且r[i].key>=r[2i+1].key的完全二叉树被称为大根堆。
即大根堆的结点的关键字大于或等于其左右孩子的关键字。
反之,称为小根堆。
堆排序是完全二叉树顺序结构的应用。
例: 判断下列两个序列是否堆?
{ 98,77,35,62,55,14,35,48 }
{ 14,48,35,62,55,98,35,77 }
重建堆
解决的问题:当堆顶记录改变时,如何重建堆。
方法:“筛选”法。
辅助空间:一个记录大小的空间。
例如:已知关键字初始序列{ 98,77,35,62,55,
14,35,48 },其对应的如下图所示。将堆顶记录与堆尾记录交换后,给出剩余记录的调整建堆过程。
顶尾交换,剩余前n-1个记录,确定了第n个记录为关键字最大的记录。







建初堆
解决的问题:将任意序列调整为堆。
算法思想:单结点的二叉树是堆。叶子结点的序号大于n/2。
“筛选”只需从第 n/2 个结点开始,直到根结点。
例如:已知关键字初始序列{ 48,62,35,77,55,
14,35,98 },将其调整为堆。





堆排序
解决的问题:如何利用堆完成排序。
已知:堆的顶尾记录交换,剩余前n-1个记录,确定了第n个记录为关键字最大的记录。
算法思想:
① 建初堆。
② 交换堆顶和堆尾记录,并用剩余前面的记录重建新堆。
③ 重复步骤n-1次即可完成排序。






算法分析
时间复杂度:O(nlog2n)。
空间复杂度:O(1)。
稳定性:不稳定。
欢迎大家加我微信交流讨论(请备注csdn上添加)
边栏推荐
- UNION ALL UNION FULL JOIN
- Selection (028) - what is the output of the following code?
- 案例解析:用「度量」提升企业研发效能|ONES Talk
- Some updates about a hand slider (6-18, JS reverse)
- How should we measure agile R & D projects?
- Non single file component
- 研究生宿舍大盘点!令人羡慕的研究生宿舍来了!
- Getting started with the go Cobra command line tool
- [JS] - [array application] - learning notes
- Servlet
猜你喜欢

慕思股份深交所上市:靠床垫和“洋老头”走红 市值224亿
![[basic knowledge] ~ half adder & full adder](/img/06/7f1ede65dca527c8630285b587a4ba.png)
[basic knowledge] ~ half adder & full adder

01_SpingBoot 框架入门

Theoretical analysis of countermeasure training: adaptive step size fast countermeasure training

07_SpingBoot 实现 RESTful 风格
![[JS] - [linked list - application] - learning notes](/img/e1/76d2a347b05212de349322f43e0b3a.png)
[JS] - [linked list - application] - learning notes

Dynamic menu, auto align

03_ Spingboot core profile

【基础知识】~ 半加器 & 全加器

【nvm】
随机推荐
376. 机器任务
Financial management [4]
Push markdown format information to the nailing robot
File contains vulnerability issues
Selection (027) - what is the output of the following code?
Uncover the secrets of Huawei cloud enterprise redis issue 16: acid'true' transactions beyond open source redis
Financial management [1]
Selection (028) - what is the output of the following code?
推送Markdown格式信息到釘釘機器人
F29oc analysis
Laravel authentication module auth
golang convert map to json string
Construction equipment [6]
宁德时代定增450亿:高瓴认购30亿 曾毓群仍控制23%股权
Non single file component
Dynamic menu, auto align
伪原创智能改写api百度-收录良好
jar中没有主清单属性
Dig deep into MySQL - resolve the non clustered index of MyISAM storage engine
力扣解法汇总515-在每个树行中找最大值