当前位置:网站首页>选择类排序法
选择类排序法
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上添加)
边栏推荐
- RT-thread使用rt-kprintf
- golang convert json string to map
- 15 lines of code using mathematical formulas in wangeditor V5
- Docker installation MySQL simple without pit
- Financial management [2]
- Attention, postgraduate candidates! They are the easiest scams to get caught during the preparation period?!
- Super detailed cookie addition, deletion, modification and query
- Construction equipment [4]
- Collation of Digital IC design experience (II)
- 23研考生注意啦!备考期间最容易中招的骗局,居然是它们?!
猜你喜欢
Blogs personal blog project details (servlet implementation)
Installation and deployment of ganglia
Canvas to add watermark to pictures
RT thread uses RT kprintf
【js】-【数组、栈、队列、链表基础】-笔记
[JS] - [tree] - learning notes
How should we measure agile R & D projects?
第六章 网络学习相关技巧5(超参数验证)
JD 618 conference tablet ranking list announced that the new dark horse brand staff will compete for the top three, learning from Huawei, the leader of domestic products
【js】-【數組、棧、隊列、鏈錶基礎】-筆記
随机推荐
【UVM入门 ===> Episode_8 】~ Sequence 和 Sequencer、Sequence 层次化
推送Markdown格式信息到釘釘機器人
Use of laravel verifier
【js】-【栈、队-应用】-学习笔记
golang map clear
Building Survey [3]
花房集团二次IPO:成于花椒,困于花椒
JD 618 conference tablet ranking list announced that the new dark horse brand staff will compete for the top three, learning from Huawei, the leader of domestic products
Main cause of EMI - mold current
Selection (025) - what is the output of the following code?
Dynamic menu, auto align
Installation and deployment of ganglia
[JS] - [array application] - learning notes
InnoDB, the storage engine of MySQL Architecture Principle_ Redo log and binlog
【js】-【树】-学习笔记
docker安装mysql-简单无坑
Construction equipment [6]
[ROS play with turtle turtle]
File contains vulnerability issues
Uncover the secrets of Huawei cloud enterprise redis issue 16: acid'true' transactions beyond open source redis