首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

堆排序其实没那么难

堆指的是每个节点的值大于等于或小于等于左右节点的值的完全二叉树结构,堆又分大顶堆(每个节点的值大于等于左右节点的值)和小顶堆(每个节点的值小于等于左右节点的值)

使用堆进行排序的前提是要先构造一个堆出来,这里以大顶堆为例。

给定一个数组进行构造大顶堆。

构造大顶堆的主要思路:

1、n个数据;

2、从待处理的数据里取出一个数据,插入到堆的尾部,并调整成大顶堆;

2.1、如果调整的节点值比其父节点值大,那么两个节点交换值,重复该步骤,直到调整的节点是根节点;

2.2、否则插入节点后就是大顶堆,无需调整;

3、重复步骤2直到所有数据已取出。

附上构建堆的视频

构造堆的代码实现:

堆也构建完了,那么剩下就是该怎么排序了,排序的思路是:

1、有n个元素的大根堆;

2、用根节点和当前堆的最后一个节点进行交换;

3、将剩下的n-1个元素再调整成大顶堆(调整大顶堆思路参照构造大顶堆的思路);

4、重复步骤2、步骤3,直到完成排序。

完整的堆排序过程:

代码实现:

得到的数组,逆序输出就是排序后的数组了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191217A0AIG700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券