LeetCode:三路快排实现一个数组中至于三个元素时的排序

4 篇文章 0 订阅

     LeetCode:三路快排实现一个数组中至于三个元素时的排序

文章开始把我喜欢的这句话送个大家:这个世界上还有什么比自己写的代码运行在一亿人的电脑上更酷的事情吗,如果有那就是让这个数字再扩大十倍

public class sortColor {
    /*****
     * 三路快排实现一个数组中只有0,1,2三种元素时候的排序
     * 时间复杂度O(n)
     * 只需遍历一边数组无需开辟额外空间
     */
    static void sortColors(int [] nums){
        int zeros = -1;//nums[0,......zeros]中存放0;初始状态无效
        int two = nums.length;//[two,......n-1]中存放2;初始状态无效

        for(int i=0;i<two;){
            if (nums[i]==1)
                i++;
            else if(nums[i]==2){
                two--;
                nums[i]=nums[two];
                nums[two]=2;//交换,i不需++
            }
            else if (nums[i]==0){
                zeros++;
                nums[zeros]=0;
                nums[i]=1;
                i++;
            }
        }

    }

    public static void main(String[] args) {
        int [] nums={1,2,1,2,1,0,0,2,1,2,0,1,0};
        sortColors(nums);
        for (int e:nums)
            System.out.print(e);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值