堆排序的讲解与代码(C语言)实现

实现堆排序的思路:

1.对与堆排序我们不必先去实现一个堆,将数组的元素一个一个插进去,我们可以知道数组是一个完全二叉树的结构,所以可以直接在数组上建堆。

 2.如果是排升序,我们可以建小堆找出最小的数。

  

 找到最小的数为10,如何找到次小的数呢?如果从12开始剩下的看作一个堆,之前建立的堆关系就全都乱了,这时需要重新建立小堆,才能选出次小的数!这样的效率太低了!

换一种思路,我们建大堆排升序。建大堆选出最大的数,将最大的数与最后一个数交换,把最后一个数不看做堆里,从堆顶向下调整,以此类推就实现排序了。(如果我们要实现降序的话就是建一个小堆。改为建小堆只需要将向下调整函数中的选择交换哪一个数的条件改为小于)。

堆排序的实现:

#include <stdio.h>
#include<assert.h
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loveandsharef

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值