C++堆排序建堆问题
答案:1 悬赏:40
解决时间 2021-01-19 05:59
- 提问者网友:戎马万世
- 2021-01-19 02:05
C++堆排序建堆问题
最佳答案
- 二级知识专家网友:雪起风沙痕
- 2021-01-19 03:14
在你的HeapSort应该加一段初始化为最小堆的代码,然后再进入那个for循环。BuildHeap建堆的过程是至上而下的,也就是说j的值变成 2*j或 2*j+1,而不是j/=2.
如果按你这样的方法构建会出现这样的交换过程:
1.8 2 3 1
2.8 1 3 2
3.1 8 3 2
显然不是最小堆,正确的应该是1 2 3 8
你可以看一下这个:http://blog.csdn.net/ouyangying123/article/details/51334165追问我改了一下但是还是有问题,能帮忙看看吗
追答void BuildHeap(){
if(r[j] 交换;
}
if(r[j] }追问
还得再麻烦你一次。。。改完之后还是什么都输出不了,应该是还有别的问题。。但是我看不出来。。
追答如果单是对代码的话,你可以照着上面的链接里面的代码一行一行对~
我觉得你的思路不是很清晰,建议你照着链接里的数据,手动模拟一遍过程,然后根据过程对你的代码~ 要注意数组下标 和 你的堆下标是否一致~
如果按你这样的方法构建会出现这样的交换过程:
1.8 2 3 1
2.8 1 3 2
3.1 8 3 2
显然不是最小堆,正确的应该是1 2 3 8
你可以看一下这个:http://blog.csdn.net/ouyangying123/article/details/51334165追问我改了一下但是还是有问题,能帮忙看看吗
追答void BuildHeap(){
if(r[j]
}
if(r[j]
还得再麻烦你一次。。。改完之后还是什么都输出不了,应该是还有别的问题。。但是我看不出来。。
追答如果单是对代码的话,你可以照着上面的链接里面的代码一行一行对~
我觉得你的思路不是很清晰,建议你照着链接里的数据,手动模拟一遍过程,然后根据过程对你的代码~ 要注意数组下标 和 你的堆下标是否一致~
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯