/** * @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; }}