当前位置: 首页 > 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}

相关文章:

  • 【HTML】【Web开发】滑动条挑战
  • Docker的基本概念和一些运用场景
  • Linux[基础指令][2]
  • Vue3 + Vite + TS,使用 ExcelJS导出excel文档,生成水印,添加背景水印,dom转图片,插入图片,全部代码
  • Java中的方法重写(Override)与方法重载(Overload)详解
  • 位运算练习:起床困难综合征(贪心,位运算)(算法竞赛进阶指南学习笔记)
  • 关于ubuntu密码正确但是无法登录的情况
  • 互联网大厂Java面试:从基础到进阶的技术点探讨
  • 短信验证码安全实战:三网API+多语言适配开发指南
  • C语言学习记录(17)编译和链接
  • vue3 + element-plus中el-drawer抽屉滚动条回到顶部
  • Scenario Dreamer:用于生成驾驶模拟环境的矢量化潜扩散模型
  • 【Linux禁用历史命令】
  • 从零开始配置 Zabbix 数据库监控:MySQL 实战指南
  • SSH 互信被破坏能导致 RAC 异常关闭吗
  • 脚本备份数据
  • 热敏电阻的应用说明
  • Centos虚拟机远程连接缓慢
  • 数据结构与算法-顺序表应用
  • 网络原理 - 4(TCP - 1)
  • 秭归“橘颂”:屈原故里打造脐橙全产业链,创造12个亿元村,运输用上无人机
  • 白宫新闻秘书:美政府将在法庭上回应哈佛大学诉讼
  • 2025年度沪惠保参保今开启:保费不变,国内特药种类扩增
  • 林毅夫:中美经济确有脱钩风险,但“完全脱钩”可能性不大
  • 护航民营企业出海,上海设37家维权工作站、建立近百人专家团队
  • KZ队史首冠,透过春决看CF电竞张扬的生命力