Alixeu 2021-06-23 16:50 采纳率: 0%
浏览 30

堆排序为什么从数组中间开始

堆排序为什么从数组中间开始,而不是从开头开始

  • 写回答

1条回答 默认 最新

  • 神仙会飞吗 2022-08-29 16:51
    关注

    据我的理解堆排序并不是按数组的位置开始的,堆排序是根据二叉树的节点交换进行排序的,二叉树也可映射为数组但原理不变。分为大顶堆构筑和小顶堆构筑,大顶堆的父节点比左右子节点大,小顶堆相反。例:1,首先构建一个二叉树。2,将二叉树转换成大顶堆(或小顶堆),这时树根节点将是最大(或最小)的值。3,将根节点与最后一个节点交换,并排除最后一个节点,此时排除的值将是最大(或最小)值,并且此时的二叉树又变成了不为顶堆的二叉树。4,再次构建大顶堆(或小顶堆),不包括刚排除的值,重复以上步骤不断获取顶堆的最大(或最小)的值排除。5,追后排除的值就是从大到小排序。

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)
  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据