三路快排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


继续加油!:)


0
1
不考过程序员不改名字
明白了老师,在判断=0的情况时需要i++
2021-05-31
共1条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程