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);
}
}