分享好友 最新资讯首页 最新资讯分类 切换频道
数据结构(8):排序
2024-12-28 04:00

机械硬盘的读取是很慢的

前面时 保存好的 是排好序的哦 一个一个检查!然后放到改在的位置

只有小的时候换,等于的时候不换,这样可以保证算法的稳定性

1.代码实现

2.代码实现(哨兵)【no没上一个清晰】

哨兵用于存储 要挪的元素!相当于上一个算法里的temp

3.两个算法复杂度和稳定性

时间复杂度

4.优化-折半插入序列

①一般数字
②相同的数字

low>heigh 是停止折半查找

这个时候low右边的都大于插入值!A[0]复制到low所在的位置

当A[mid]的值等于要插入的值的时候不要停止!应该再右边继续查找

③代码实现
④时间复杂度

5.对链表进行插入排序

好就好在 移动元素的次数变少了,因为在这里是指针 只需要动指针就可以了

但是时间复杂度还是那样

6.总结

1.介绍

这样的话 插入排序的效率就会高一点

总结

2.常考

3.算法实现【交替】

在第二趟的时候,一个子表里有好几个元素,算法实现的时候不是一个一个子表单独排序的而是交替进行的

主要是++i这句哦!i 指针一次只加1

4.复杂度

5.稳定性

不适用于链表的实现

6.总结:【代码不太考!】

1.冒泡排序

每一趟都会使最小的数冒在前面

相同的话不冒 保证算法的稳定性

①算法实现
②算法性能
③冒泡在链表里
④总结

没有发生交换,算法就结束!flag变量

2.快速排序

不断地划分

①算法过程

根low指向的元素49比,49现在就是基准或者说是枢轴

low 和high向中间移动

此时low是空的 所以high向左移动

这是小了就换!这是high空了

所以low向右移动 这个过程一直持续到 low=high时,把49放进去然后结束

第一次结束之后49一定在正确的位置,所以对左右两个子表递归的调用

不断地划分  最后  ok啦

②代码

递归调用栈:理解的时候注意标上#表示第几行 和传入的参数是多少

③算法效率

空间复杂度

组织成二叉树 就可以知道递归调用的层数

最好最坏时间、空间复杂度

最坏的情况

④优化

完全有序和逆序的时候 效率最差

⑤稳定性

一次划分 指的是对连续表的快速排序

一趟排序 指的是一层quicksort 即从第一层到第二层这样

一次划分可以确定一个元素的位置,一趟排序也许可以确定多个元素的位置

1.简单选择排序

①代码实现
②复杂度
③稳定性
④总结

时间复杂度不会因为所给序列特点不同而出现不同的时间复杂度

对于n个序列就要进行n-1次对比

2.堆排序

①二叉树的顺序存储
②堆定义
③堆排序时选择排序的一种

所以排序时 也是在每一趟的待排序元素中选取关键字最小(或最大)的元素加入有序子序列

堆顶的元素时最大的 所以一切都变得很简单了

④建立大根堆:【自顶而下,自下而上】

自顶而下:一个一个插入到最后,上滤【O(NlogN)】

自下而上:先写成堆 从最后一层非叶子节点,下滤【时间复杂度O(N)】

只检查所有的非终端结点【即不检查叶子节点!】

方法

可以直接通过下标 找到孩子的坐标! 小元素不断下坠

从n/2向下取整 到1 反向找

代码实现
⑤基于大根堆排序

然后9 进行下坠

然后回复成大根堆了

第二趟

最后一个元素进行互换,最后一个元素就是顺序表中的最后一个

交换--下坠 重复--直到排好

而基于“小根堆”的时“递减序列”

代码实现
⑥算法效率
建立初始堆

!建堆的过程,关键词对比的次数不超过4n,建堆的时间复杂度就是o(4n)

⑦排序的算法效率
总的时间复杂度
⑧稳定性

优先换左孩子

不稳定例子

不稳定

排序总结
排序练习
在堆中插入新元素

插入表尾,和父节点 (n/2向下取整) 进行对比 下的话就上升一直这样直到不能上升为止

在堆中删除一个元素

用最后一个元素代替删除的元素 然后进行下坠的操作

直到不能下坠为止

下下坠时 如果子节点有两个的话 要对比两次选出最

堆插入删除总结

两个有序的序列合并起来

1.“n路”归并【对比关键字n-1次】

2.手算模拟

3.代码实现

用一个辅助数组B

辅助数组复制所有的要排序的数 过去!i j指针比较小的上去 同时++ k也++

最后两行

也是递归算法

4.算法效率分析

最好最坏和平均的时间复杂度都是o(nlogn)

空间复杂度

递归的空间复杂度呢? 递归的空间复杂度是:o(logn)

5.稳定性:稳定

总结

第一趟

按照个位递减的序列

第二趟

收集

第三趟

收集

1.基数排序过程:【不是基于比较的算法,比较特别!】

2.算法效率分析

空间复杂度

新增一个队列只是新增了一个指针域 空间复杂度是O(1)

时间复杂度

3.稳定性:稳定

4.基数排序的应用

按照权重递增的顺序 进行拆分

每一个关键字位数目不一定相同!1

5.擅长解决的问题

6.总结

链式存储

1.外存和内存之间的数据交换

是以块为单位进行排序的

2.外部排序的原理

3块缓冲区

①构造初始“归并段”

读进去之后进行内部排序后得到

把输入1换到输出1

输入2 同理 

重复:得到归并段

②第一趟归并“归并段”

两个归并段的第一个字段 放到输入缓冲区 进行归并排序

放到输出缓冲区 满了就写磁盘 输入缓冲区1空的话就紧接着读归并段1 2空的话读2的   别乱着读1

类似的对3、4  5、6  7、8 进行排序

经过第一趟8变4

③第二趟

一样的

空了之后立即放入对应的归并段

归并之后会写入外存的另一个空间中!不会在原地方

④第三趟

3.时间开销分析

2的三次方等于(16/2) 所以需要对比 3次至少

多路归并

2 的平方 等于 (16/4) 所以需要两趟

多路归并的问题

则就能在原点相遇

这里初始归并段完全取决于内存工作区有多大

1.多路平衡归并

图和定义不一致

所以K路平衡归并的定义如下

因此上面这个例子是 四路归并排序 但不是4路平衡归并排序

1.败者树定义

败者树可以看作是 完全二叉树

2.败者树的使用

派大星从他那一路打上去就可以,因为右边的谁强谁弱已经知道了

3.败者树在多路平衡归并中的应用

多路平衡归并

本来找到最小的需要进行7次对比!现在用每一个归并段的第一个形成一个败者树

找到最小值

记录编号即可,不用记住是谁

第一趟构造败者树时,需要对比N-1次

只要构成了败者树,下一次的关键词对比 只需要比败者树 分支层有多少层!高度的次数就可以!这样就大大的减少了

1024路 本来每一次都需要1023次对比 用败者树10次就好

代码:【no考】

所以ls[0]对应的就是冠军

4.总结

初始归并段极可能的小

开始的方法

在磁盘中那两个放入缓冲区! 然后归并排序后放回磁盘! 一共6个记录 行程里一个归并段

如果想要归并段更长 可以让内存中多几个缓存区 同时归并好几个字段

也就是说以前的方法说明:得到的初始归并段的数量是直接由 内存工作区WA的容量决定的

怎末构造一个比内存工作区更大的归并段呢?--置换排序

1.置换选择排序

①读入找到最小【比之前大】拿出去 再读入

递增的话找个最小的让他出去

记录出去的值的大小在minimax里,在读入一个新的

再找到最小的是6 而且6比minimax大 让6出去 并且把minimax的值改为6

重复。。。。

②不符合条件了

除了10就是14最小比minimax的值大 把14拿出去

重复。。。

直到。。

③不符合的站买了 第一个归并段结束 解冻不符合 重复12找到第二个归并段

归并段少--归并操作时的读写次数也就少了

输入输出的时候不是像演示一样 一个一个读和写的 是有缓冲区的 也就是说一次读入一堆

2.总结

上面的置换选择排序的得到的初始归并段的长度不一 因此我们需要这个算法就是为了找到一个最好的方式 使得归并的时候读写磁盘的次数最少

带权路径长度:可以看树里的哈夫曼树

所以

因此按照构造哈夫曼树的方法构造最佳归并树即可

1.多路归并

选出最小的合并一样的和哈夫曼树

2.如果减少一个归并段【减少30】【坑!】

这是不对的因为 最后一次归并不是三个是两个

3.添加几个虚段

度为0的是叶子节点 相当于叶子节点

k*n_k表示的是分叉的叉的数量 

4.方法

小练习

5.总结

最新文章
探讨十款高人气的电脑维护与优化工具
下面给大家推荐几款好用的免费的重装系统软件,有需要的小伙伴们来了解一下。系统重装专家官方版是一款方便易用的电脑重装软件。
百度百科词条可以随便编辑吗?谁都可以编辑吗?
很多用户会有这样的感觉,在百度上搜索某个人物名称或是某个企业名称,只要能搜出来百度百科词条就会下意识觉得这个人物或是企业
浅析访谈式课堂教学在干部培训中的应用
浅析访谈式课堂教学在干部培训中的应用中共温岭市委党校 陈周宁内容提要:干部教育是党校的核心工作之一。在新形势下,如何充分
Ubuntu16.04 下docker部署web项目
概念性的请戳安装完成之后默认会启动docker服务,如果没有启动和正常服务一样启动就好待续中·················
【面试】vivo-java开发-安卓方向-技术一面
【这里想说,因为自己也走了很多弯路过来的,所以才下定决心整理,收集过程虽不易,但想到能帮助到一部分自学java 的人,心里也
网站流量与率双提升,网络推广优化策略全解
网络推广优化旨在通过策略提升网站流量和率。关键包括:优化关键词,提高搜索引擎排名;优化网站结构,提升用户体验;运用社交媒
深入探讨床戏高峰瞬间的大尺度视频平台解析
触糖c1v1骨科是一种极具话题性的小说题材,通过探讨家庭和社会的复杂关系,引发读者的思考。在这一系列作品中,作者常常融入个人
珠三角最贵墓地每平米11万元 部分墓地限购
  每到清明,墓地价格和墓地存量就备受关注。眼看珠三角墓地价格年年水涨船高,到底哪里便宜哪里贵,各城还剩多少墓地可用?南
万能学术搜索引擎搭建-基于streamlit
万能超级搜索引擎V7.0(赚钱版)绝对是目前全国功能最优秀的超级搜索引擎之一全国已超过1000个网站和超过100家网吧正在使用本程序V
微信分身版ios免费版下载最新版
微信分身版ios免费版下载最新版是一款非常好用的社交聊天软件!我们手机上只能安装一个微信,这款软件可以同时让你安装多个。多