三路快排75题测试结果出错
来源:3-5 三路快排partition思路的应用 Sort Color
不考过程序员不改名字
2021-05-31
//三路快排
public static void sortColors2(int[] nums) {
int zero = -1,two = nums.length;
for (int i = 0;i<two;){
if (nums[i]==1){
i++;
}else if(nums[i]==0){
zero++;
int a;
a = nums[i];
nums[i] = nums[zero];
nums[zero] = a;
}else{
two--;
int b;
b = nums[i];
nums[i] = nums[two];
nums[two] = b;
}
}
老师,按照您讲解的思路写的java代码,测试序列是(2,0,2,1,1,0)得到的测试结果是(1,1,2,2,0,0),您看是哪里出现了错误嘛
写回答
1回答
-
liuyubobobo
2021-05-31
你的程序的问题使用测试用例 [2, 0](数组中含有两个元素,一个 2,一个 0)就能复现出来。0 没有正确的排到 2 的前面。使用过这个测试用例,用单步跟踪的方式跟踪一下,看一下你的程序为什么在处理 0 的时候,没有排到 2 的前面?哪里和你的思维想象的不一致?自己的思维哪里错误了?或者自己的思维是正确的,但实际上程序没有正确的反应你的思维?
进步就再这个过程中哦。
这个问题使用三路快排的思路,我的 java 参考代码:https://git.imooc.com/coding-82/coding-82/src/master/03-Using-Array/Course%20Code%20%28Java%29/05-Sort-Colors/src/Solution2.java
继续加油!:)
012021-05-31
相似问题