数据结构与算法 学习笔记 排序部分(下)

本文是关于数据结构与算法学习的笔记,重点探讨了排序算法中的快速排序和堆排序。提到堆排序在实际应用中较少使用,因其大量数据交换导致的空间复杂度较高。而快速排序在特定情况下,如数据基本有序或数量较少时,效率较高。文章还介绍了快速排序的分区策略,以及如何避免最坏情况,比如通过随机选择轴或预排查已排序数组。
摘要由CSDN通过智能技术生成

油管上的CS61B的视频
学习代码

随看随记

  1. 堆排序用的少的原因:对堆排序中的数据是乱的,在堆排序的过程中,需要进行大量的数据交换,而且在交换的过程中,因为二叉堆中的数据无序,所以在进行一次交换,可能会需要同时访问到一大片数据。需要消耗掉很大部分缓存,堆内存也不友好,因此没人用。都用快速排序。

Basic Sorting

Selection Sort,Heap Sort

  • 选择排序的步骤
    1. 寻找最小的那一项。
    2. 将这一项和最前面哪一项进行交换,并修正他。
    3. 重复剩下未被修复的部分,直到所有的项目都被修复。
  • 其运行逻辑为
  1. 将所有的新的项目都放到最大堆中,并且丢弃输出数组,创建新的输出数组
  2. 重复N此以下动作
    • 从最大堆中弹出最大值
    • 将最大值放入到输出数组的未使用部分的末尾中 在这里插入图片描述

对于堆来讲,将数据存入堆的时候就已经做了最大最小的排序了,依靠堆的数据结构就已经办到了,当堆不断pop出最小值时,就已经实现了上述最有复杂度的找最小值的问题,接下来做的就只剩下吧新的最小值加进去新的堆中就可以了。

  • 使用创建堆的方法解决了寻找最大最小值的问题 ,减少了时间复杂度
  • 同时也增加了空间复杂度,是由于创建了新的数组和堆的空间
  • 在这里插入图片描述
  • 为了节省多建立一个数组的空间又有了In-place Heapsort排序

二叉最小堆保证其子节点第一是大于其父节点的,并且保证左节点满员。

  • 其和其原始的Heapsort排序不同是其在最开始没有建立起一个真实的Heap,而仅仅根据数组的顺序将其进行了Heap化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值