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

来源:3-7 双路快速排序法

慕妹626757

2019-04-13

老师,想请教您,在_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回答

liuyubobobo

2019-04-14

这两句话没有错误。


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


======


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


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


继续加油!:)

0
5
liuyubobobo
回复
慕妹626757
没有随机会不会出错?两个数排序会不会出错?三个数会不会出错?总之,只看这两句话,是没问题的。我倾向于你程序整体其他地方潜藏着Bug。你不能只靠运行程序排查问题,需要找到可以复现错误的最小数据集,之后通过单步跟踪定位程序出现bug的地方。加油!
2019-04-16
共5条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程