八大排序(二)-----堆排序

2023-10-27

基本思想

1):将带排序的序列构造成一个大顶堆,根据大顶堆的性质,当前堆的根节点(堆顶)就是序列中最大的元素

2):将堆顶元素和最后一个元素交换,然后将剩下的节点重新构造成一个大顶堆;

3):重复步骤2,如此反复,从第一次构建大顶堆开始,每一次构建,我们都能获得一个序列的最大值,然后把它放到大顶堆的尾部。最后,就得到一个有序的序列了

构造堆

在构造有序堆时,我们开始只需要扫描一半的元素(n/2-1 ~ 0)即可,为什么

因为(n/2-1)~0的节点才有子节点,如图1,n=8,(n/2-1) = 3 即3 2 1 0这个四个节点才有子节点

(图1:初始状态)

所以代码4~6行for循环的作用就是将3 2 1 0这四个节点从下到上,从右到左的与它自己的子节点比较并调整最终形成大顶堆,过程如下:

第一次for循环将节点3和它的子节点7 8的元素进行比较,最大者作为父节点(即元素60作为父节点)

【红色表示交换后的状态】

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

八大排序(二)-----堆排序 的相关文章

随机推荐

  • AI绘画指南:在CentOS7中训练Lora模型

    本次训练在centos7中完成 使用的训练脚本是 https github com Akegarasu lora scripts git https github com kohya ss sd scripts git 一 安装GPU环境
  • 【动态规划】合唱队形

    题目描述 n位同学站成一排 音乐老师要请其中的 n K 位同学出列 使得剩下的K位同学排成合唱队形 合唱队形是指这样的一种队形 设K位同学从左到右依次编号为1 2 K 他们的身高分别为T1 T2 TK 则他们的身高满足T1 lt Ti l
  • 关于代码家(干货集中营)共享android端知识点综合整理

    关于代码家 干货集中营 共享android端知识点综合整理 标签 开源项目自定义控件教程特效工具 2016 03 08 13 23 8520人阅读 评论 2 收藏 举报 分类 移动开发 28 版权声明 本文为博主原创文章 未经博主允许不得转
  • 探索MySQL错误: 1241 - Operand should contain 1 column(s)问题解决方案

    AI绘画关于SD MJ GPT SDXL百科全书 面试题分享点我直达 2023Python面试题 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java python面试题 项目实战 AI文本 OCR识别最佳实践 A
  • Qt中moc问题(qt moc 处理 cpp)

    我用的是QT Designer 一般只有用到信号signals和槽slots时才会用到MOC 因为采用信号signals和槽slots是QT的特性 而C 没有 所以采用了MOC 元对象编译器 把信号signals和槽slots部分编译成C
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • libevent源码学习(5):TAILQ_QUEUE解析

    目录 前言 结点定义 链表初始化 链表查询及遍历 链表查询 链表遍历 插入结点 头插法 尾插法 前插法 后插法 删除结点 替换结点 总结 前言 在libevent中使用到了TAILQ数据结构 看了一下其他资料 发现TAILQ这一数据结构不仅
  • TVM 0.9 在 ubuntu(任意版本)上的安装(简单且保姆级!)

    近一年来尝试过TVM在ubuntu16 04 ubuntu18 04 ubuntu20 04 以及windows上的安装 也看了官方教程和网上各种博客 踩坑无数 现在总结在Ubuntu上踩坑几率最小的安装流程如下 建议学习TVM一开始就在u
  • fisco-bcos使用caliper进行压力测试

    使用caliper对fisco bcos进行压力测试 通过Caliper进行压力测试程序 注意 官网给出的测试案例会出现错误 我会给出相应的解决方案 本文以centos系统为例进行测试 1 环境要求 第一步 配置基本环境 部署Caliper
  • 勇敢的人

    昨天刚写完做个勇敢的人 发现一篇博客写的非常好 于是果断给它转载一下 这位老师的发言 在某个瞬间打动了现在的我 请观看 https blog csdn net zkl99999 article details 46683535 关键字 毛尖
  • iOS检测网络连接状态

    请从Apple网站下载示例 点此下载 然后将Reachability h 和 Reachability m 加到自己的项目中 并引用 SystemConfiguration framework 就可以使用了 Reachability 中定义
  • Java 23种设计模式的分类和使用场景

    听说过GoF吧 GoF是设计模式的经典名著Design Patterns Elements of Reusable Object Oriented Software 中译本名为 设计模式 可复用面向对象软件的基础 的四位作者 他们分为是 E
  • Qt创建的子线程不断循环,主线程界面一直处于无响应状态

    说明 今天用子线程处理数据 但只创建了子线程 还没有来得及让子线程处理大量的数据 在子线程只作了简单处理 发现主线程界面一直不能响应 在主线程让子线程参数isStop true 也跳不出循环 while isStop emit mySign
  • KCF追踪器在opencv和RM中的应用

    1 理论部分 参考文档 KCF目标跟踪方法分析与总结 概念 1 判别式模型和生成式模型 判别式模型 根据训练数据得到分类函数和分界面 比如说根据SVM模型得到一个分界面 然后直接计算条件概率 P y x 我们将最大的 P y x 生成式模型
  • 模拟登陆 Selenium

    模拟登陆 使用爬虫实现登录操作 为何需要做模拟登陆 有些平台只有登录之后才可以访问其内部其他的子页面 如何实现模拟登陆 模拟点击登录按钮发起的请求即可 阻力 验证码的识别 验证码识别 使用线上的打码平台进行各种各样验证码的识别 不包含滑动验
  • eclipse创建动态web项目

    1 打开eclipse 2 依次选择File new Dynamic Web Project 点击new如果没有Dynamic Web Project 选择Other 3 在wizards下输入web 在下面的选框中选择 Dynamic W
  • 前端(十七)——gitee上开源一个移动端礼盒商城项目(前端+后台)

    博主 小猫娃来啦 文章核心 gitee上开源一个移动端礼盒商城项目 文章目录 前言 开源地址 项目运行命令 项目基本展示 前端效果细节展示视频 前端代码细节展示视频 后台效果展示 后台代码展示 经典优势 思维导图 实现思路 前言 项目样式老
  • 养娃探索记录

    0 3岁 搞好身体 3 6岁 培养好生活习惯 6 9岁 培养好学习习惯 9 12岁 培养自学能力 12 15岁 了解三百六十行 不同行业不同职业都是做什么的 15 18岁 确定未来发展方向和人生目标 自我决定理论对我们的教育有着重要的指导作
  • Anaconda安装Pytorch,以及在Pycharm中的配置

    Anaconda安装Pytorch 以及在Pycharm中的配置 有关Anaconda安装请移步安装Anaconda Python3 9 Tensorflow pytorch cpu 打开Anaconda Prompt 创建环境 这个步骤同
  • 八大排序(二)-----堆排序

    基本思想 1 将带排序的序列构造成一个大顶堆 根据大顶堆的性质 当前堆的根节点 堆顶 就是序列中最大的元素 2 将堆顶元素和最后一个元素交换 然后将剩下的节点重新构造成一个大顶堆 3 重复步骤2 如此反复 从第一次构建大顶堆开始 每一次构建