堆排序

本文作者分享了自己成功实现堆排序的经验,强调遇到困难时,通过看视频、读书和深入思考比盲目看博客更有效。堆排序涉及大顶堆和小顶堆概念,以及如何在列表中构建二叉树。建堆从最后一个父节点开始,逐个进行,而排序过程则是通过不断调整堆,将堆顶元素移到末尾来完成递减排序。
摘要由CSDN通过智能技术生成

我终于把堆排序写出来了!!!

有个总结:当你觉得一个东西很难的时候,胡乱的看博客可能是极其浪费时间的,你就是打开一篇博客,然后another;如果可以的话可以找个视频看看,然后看看对应的书,沉下心慢慢看,慢慢思考,逐渐脱离书本写程序。

涉及知识点:

  1. 堆排序首先要建立堆
  2. 大顶堆(父节点>=左右子节点),小顶堆(父节点<=左右子节点)
  3. 在列表中实现二叉树,若父节点为alist[i],其左右子节点肯定是alist[2*i+1],alist[2*i+2]
  4. 建堆的过程是找到最后一个父节点,向左一个个建堆,所以有for i in range(end // 2, -1, -1)
  5. 堆排序(假设是小堆,排序后为递减):每次把堆顶的节点取出,放到堆底,然后把堆底的数放到堆顶,向下筛选,构建了一个新的堆(新堆的长度每次都减一)

 

 

alist=[1,3,12,34,12,1,3,2,4]
'''小顶堆,排序后是降序'''

def siftdown(alist, e, begin, end):
    i, j = begin, begin * 2 + 1
    while 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值