C语言 算法 堆排序(新手理解向)

00 理解

  • 堆排序:利用堆的数学规律,直接通过数组下标就可以实现的复杂(非)思想排序过程。T低O也低,大神创造,你值得拥有!
  • 堆的数学规律1:父子之间的下标存在规律,这就类似于链表指来指去的指针,树的结构得以数组下标方便实现。
  • 堆的数学规律2:堆的顶端又可以作为筛选结果,层层选拔,排序就完成了。毕竟排序说穿了,就是在若干数里面不断选出极值,再筛选得最值,有了“最”就有了大小关系,因此序也就出来了。
  • 特点:初看起来高大上,但是并不涉及高深的数学思想,理解一下就觉得简单了!
    ----------------------------以大根堆为例------------------------------

01建堆

过程描述:从下往上,层层选拔当前人字结构的大值当爸爸

  1. 为啥要建堆!!!
    如0的第二、三点说的,建堆完成后,得到了:
    1)最值(N个数中的)
    2)大根树结构
  2. 然后呢???
    1)有了最值就得到了排序结果的第一个值,距离成功进了一步
    2)大根树的严密结构为革命的胜利奠定了基础!【这里连接到02调整的第1点】

02调整

过程描述:最值和数组最后一位交换位置,从上往下选爸爸(这个最后一位基本又被踢下去了)

  1. 交换是???
    根在第一位,作为被已经选出来的这一位,改放在尾部可以更好的管理剩余的,需要排序的N-1个元素,也节约了位置,实现了原地排序。

  2. 为啥有第二步调整堆,直接每次对换后重复建堆,不是都可以得到一个最值吗?
    我们可以大致看到,相比需要用for遍历2次的一些其他算法,本算法除了第一次兴师动众全部比较了一次后,调换仅仅导致了根结构的局部变动,所以不需要再次建堆那么麻烦,调整堆更加轻松简单!

结语:堆排序记减记:

  • 从下往上,层层选拔,爸爸就是你爸爸
  • 垃圾上位,一路跌破,新爸爸得以登基
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值