请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

一点点小改动导致排序异常,请教老师

老师,想请教您,在_partition2函数中,把
swap(arr[l], arr[rand() % (r - l + 1) + l]);
换成
int index = rand() % (r - l + 1) + l;
T t = arr[l]; arr[l] = arr[index]; arr[index] = arr[l];
其他完全不变,为什么会导致错误的排序结果?

正在回答

插入代码

1回答

这两句话没有错误。


我用课程这一小节的官方代码,swap替换成这两句话,运行时没有问题的。请在你的环境下,使用课程的官方代码,替换成这两句话的逻辑,看看是否有问题。如果没有问题,请确认你的代码的其他逻辑部分没有问题。


======


这个课程的所有代码,都可以通过课程的官方github获得。传送门:https://github.com/liuyubobobo/Play-with-Algorithms 


具体的代码遇到问题,可以先尝试在你的环境下运行课程的官方代码,看是否有同样的问题。如果没有问题,可以仔细比对调试一下,看看自己的代码问题在哪里:)


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕妹626757 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-04-14 10:24:05
  • 提问者 慕妹626757 #2
    我是用VS2017并且是用老师您GitHub里面的代码,更改其他的swap语句完全没有问题,只是这一句替换掉后随机快速排序的结果会出错。恢复成swap语句就不影响运行的结果。
    回复 有任何疑惑可以回复我~ 2019-04-14 10:26:30
  • liuyubobobo 回复 提问者 慕妹626757 #3
    不应该,用一个小样本看看能不能重复出错误?能的话单步调试看一下问题出在哪里。
    回复 有任何疑惑可以回复我~ 2019-04-14 10:28:04
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号