我看书上堆排序,每次都要重新建堆,然后再调外根节点和最后一个结点,感觉这样好麻烦?你们是怎么做的呢

 我来答
xshrim
2013-04-07 · TA获得超过2157个赞
知道小有建树答主
回答量:688
采纳率:66%
帮助的人:527万
展开全部
堆排序很重要的一个步骤是初始建堆,它保证了树中的每个子树的根结点都比其下的子结点大。
建堆后的过程基本上就是选择出最大值,然后将被交换到根结点位置的结点进行下沉的过程。而这些过程虽然对树的局部结构进行了调整,但严格来说,不算是重新建堆。
《算法导论》上对堆排序讲得很详细。它把堆排序算法分成了三个子算法:
一个将结点下沉的递归算法;一个初始建堆算法和一个排序算法。
具体过程是:
1、初始建堆算法调用结点下沉递归算法完成建堆;
2、排序算法在建好的堆上得到根结点(即最大值),然后调用结点下沉的递归算法将交换到根结点位置的结点进行下沉。反复第2步,整个算法就完成了。
思路很清晰,可以去看看。
chiconysun
2013-03-24 · TA获得超过2.2万个赞
知道大有可为答主
回答量:5410
采纳率:92%
帮助的人:2609万
展开全部
堆排序就是这样的啊,每一趟将堆顶和最后一个元素互换,再调整
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式