/**
* @Description 三路快排,核心思想在于循环不变量的设计
* @Date 2022/1/9 4:35 下午
* @Author wuqichuan@zuoyebang.com
**/
class Solution {
//循环不变量设计如下,定义出三个区间
//nums[0.....zero] = 0
//nums[zero + 1 .....two-1] = 1
//nums[two ... nums.length - 1] = 2
public void sortColors(int[] nums) {
//先定义好zero 和 two 两个索引位置,先把两个索引放到无效值,确保第一次循环中
//循环不变量初始值是空的,是无效的
int zero = -1;
int two = nums.length;
int i = 0;
while(i < two){
if(nums[i] == 1){
i ++;
}else if(nums[i] == 2){
two--;
swap(nums,i,two);
}else if (nums[i] == 0) {
zero++;
swap(nums,zero,i);
i++;
}
}
}
public void swap(int[] nums, int index1, int index2) {
int temp = nums[index1];
nums[index1] = nums[index2];
nums[index2] = temp;
}
}