利用堆排序建立初始堆

作者: 春天终究会到来分类: 校园学习 发布时间: 2022-10-15 21:27:02 浏览:34927 次

利用堆排序建立初始堆

白甫李:
我刚开始用的也是这个方法,但是做到有一年的一道真题发现这样做是不行的,得每个插入后立刻检查堆是否被破坏然后修正,才能得到正确结果 而且王道书上给的解法也是后来我用的这种

【回复】你要看题目要求是什么。建堆有两种方式,一种是先按顺序组成二叉树,然后从n/2开始调整,王道书上的应该是这种代码,建完再排序,也叫筛选法,同时也是默认的方法。另一种是边插入边排序,每一步都当成堆的插入做,非默认。如果题目设么也不说,那必然是第一种方法,你可以看看21年真题是怎么说的
【回复】真倒霉 我看到建立初始堆的字眼 以为是从无到有,我才大二,听了一个up主讲的21年例子,给带入了。而且这两种方法结果不一样。真倒霉。
【回复】回复 @某只小五 :你仔细看,21年那个真题是插入,咱现在说的是建立堆
春天终究会到来:
视频麻烦了,标号的时候标L/2向下取整个个数就够了[妙啊] ps:标号在草稿纸上,别往卷子写奥

【回复】另附:比较次数,比较左右孩子是一次,左右孩子中大的(or小的,若小根堆)在跟父节点比较又是一次
CharmingGril:
26,18,60,14,7,45,13,32构建初始堆(小根堆)怎么建啊uu们,我晕了[大哭]

【回复】最后建立完是,7,14,13,26,18,45,60,32
树苗鸭:
各位大佬 计数排序是利用什么计数解决排序问题滴

sinx的泰勒展开式:
请问在题目没有说明的情况下,建立初始堆要按照大根还是小根来呢?

分不清杨羊:
想问一下up 是因为 3号位置与2号位置不存在比较关系吗,为啥不管2号咧~

【回复】你想想,一个大根堆到根节点之后,左边三个数据已经满足大根堆了[吃瓜],85和45换完之后,左边元素没有动,以2为根节点的子树三个元素的还是那三个元素,还是满足大根堆[吃瓜]不用管
【回复】回复 @春天终究会到来 :谢谢!我懂啦!
【回复】最后比较1号时才会看2和3谁大,谁大谁替换掉1号[奋斗]

学习心得

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!