当前位置: 首页 > news >正文

现有一整型数组,a[8] = { 4,8,7,0,3,5,9,1},现使用堆排序的方式原地对该数组进行升序排列。那么在进行第一轮排序结束之后,数组的顺序为?

初始数组

a[8] = {4, 8, 7, 0, 3, 5, 9, 1}

构建最大堆(从最后一个非叶子节点开始)

数组看作完全二叉树:

            4/     \8         7/   \     /   \0     3   5     9/1

Step 1:堆化 index=3(0 和子节点 1)

  • 0 < 1 → 交换
            4/     \8         7/   \     /   \1     3   5     9/0

数组变为:

{4, 8, 7, 1, 3, 5, 9, 0}

Step 2:堆化 index=2(7 和子节点 5, 9)

  • 9 最大 → 交换 7 和 9
            4/     \8         9/   \     /   \1     3   5     7/0

数组变为:

{4, 8, 9, 1, 3, 5, 7, 0}

Step 3:堆化 index=0(4 和子节点 8, 9)

  • 9 最大 → 交换 4 和 9
  • 然后堆化 index=2(4 和子节点 5, 7)→ 7 最大 → 再交换
            9/     \8         7/   \     /   \1     3   5     4/0

数组变为:

{9, 8, 7, 1, 3, 5, 4, 0}

最大堆构建完成:

{9, 8, 7, 1, 3, 5, 4, 0}

Step 4:第一轮排序(交换最大值与末尾,再堆化)

  • 交换 9 与 0,堆大小变为 7
            0/     \8         7/   \     /   \1     3   5     4
  • 堆化 index=0 → 与8交换 → {8, 0, 7, 1, 3, 5, 4, 9}
  • 再堆化 index=1 → 与3交换 → {8, 3, 7, 1, 0, 5, 4, 9}
            8/     \3         7/   \     /   \1     0   5     4

第一轮后数组:

{8, 3, 7, 1, 0, 5, 4, 9}

Step 5:第二轮排序(交换堆顶8与末尾4)

  • 交换后:{4, 3, 7, 1, 0, 5, 8, 9}

堆化:

  • index=0 → 与7交换 → {7, 3, 4, 1, 0, 5, 8, 9}
  • index=2 → 与5交换 → {7, 3, 5, 1, 0, 4, 8, 9}
            7/     \3         5/   \     /   1     0   4

第二轮后数组:

{7, 3, 5, 1, 0, 4, 8, 9}

Step 6:第三轮(堆顶7与末尾4交换)

  • 交换后:{4, 3, 5, 1, 0, 7, 8, 9}
  • 堆化 index=0 → 与5交换 → {5, 3, 4, 1, 0, 7, 8, 9}
            5/     \3         4/   \   1     0

第三轮后数组:

{5, 3, 4, 1, 0, 7, 8, 9}

Step 7:第四轮(堆顶5与末尾0交换)

  • 交换后:{0, 3, 4, 1, 5, 7, 8, 9}
  • 堆化 index=0 → 与4交换 → {4, 3, 0, 1, 5, 7, 8, 9}
            4/     \3         0/   1

第四轮后数组:

{4, 3, 0, 1, 5, 7, 8, 9}

Step 8:第五轮(堆顶4与末尾1交换)

  • 交换后:{1, 3, 0, 4, 5, 7, 8, 9}
  • 堆化 index=0 → 与3交换 → {3, 1, 0, 4, 5, 7, 8, 9}
            3/     \1         0

第五轮后数组:

{3, 1, 0, 4, 5, 7, 8, 9}

Step 9:第六轮(堆顶3与末尾0交换)

  • 交换后:{0, 1, 3, 4, 5, 7, 8, 9}
  • 堆化 index=0 → 与1交换 → {1, 0, 3, 4, 5, 7, 8, 9}
            1/     \0         3

第六轮后数组:

{1, 0, 3, 4, 5, 7, 8, 9}

Step 10:第七轮(堆顶1与末尾0交换)

  • 交换后就是:
{0, 1, 3, 4, 5, 7, 8, 9}

无需再堆化,排序完成


最终升序数组:

{0, 1, 3, 4, 5, 7, 8, 9}

所以,第一轮排序结束后的数组为:

{8, 3, 7, 1, 0, 5, 4, 9}
http://www.xdnf.cn/news/86365.html

相关文章:

  • 示例:spring xml+注解混合配置
  • FastAPI WebSocket 聊天应用详细教程
  • 搭建 Spark - Local 模式:开启数据处理之旅
  • 掌握 Altium Designer:轻松定制“交换器件”工具栏
  • 智能电网第1期 | 工业交换机在变电站自动化系统中的作用
  • Python 获取淘宝买家订单列表(buyer_order_list)接口的详细指南
  • [创业之路-377]:企业法务 - 有限责任公司与股份有限公司的优缺点对比
  • 如何在 Element UI 中优雅地使用 `this.$loading` 显示和隐藏加载动画
  • PyQt5、NumPy、Pandas 及 ModelArts 综合笔记
  • # 基于PyTorch的食品图像分类系统:从训练到部署全流程指南
  • 第 2.1 节: 机器人仿真环境选择与配置 (Gazebo, MuJoCo, PyBullet)
  • 【Dv3Admin】从零搭建Git项目安装·配置·初始化
  • iPaaS集成平台相比传统集成技术有哪些优势?
  • ECharts中的markPoint使用,最大值,最小值,展示label数值
  • JavaScript 渲染内容爬取实践:Puppeteer 进阶技巧
  • Qt之moveToThread
  • Spark-Streaming简介 核心编程
  • 【MySQL】索引失效场景大全
  • C++:继承
  • window上 elasticsearch v9.0 与 jmeter5.6.3版本 冲突,造成es 启动失败
  • 使用Autocannon.js进行HTTP压测
  • Vue3 + Vite + TS,使用 ExcelJS导出excel文档,生成水印,添加背景水印,dom转图片,插入图片,全部代码
  • 建造者模式详解及其在自动驾驶场景的应用举例(以C++代码实现)
  • 数据库对象与权限管理-Oracle数据字典详解
  • Linux mmp文件映射补充(自用)
  • 【Linux】虚拟内存——页表与分页
  • 性能测试篇——八股笔记
  • 从零实现富文本编辑器#3-基于Delta的线性数据结构模型
  • IOT项目——物联网 GPS
  • 如何在 Ansys Icepak AEDT 中设置多个流程以加快仿真速度?