1. /**
    2. * @Description 三路快排,核心思想在于循环不变量的设计
    3. * @Date 2022/1/9 4:35 下午
    4. * @Author wuqichuan@zuoyebang.com
    5. **/
    6. class Solution {
    7. //循环不变量设计如下,定义出三个区间
    8. //nums[0.....zero] = 0
    9. //nums[zero + 1 .....two-1] = 1
    10. //nums[two ... nums.length - 1] = 2
    11. public void sortColors(int[] nums) {
    12. //先定义好zero 和 two 两个索引位置,先把两个索引放到无效值,确保第一次循环中
    13. //循环不变量初始值是空的,是无效的
    14. int zero = -1;
    15. int two = nums.length;
    16. int i = 0;
    17. while(i < two){
    18. if(nums[i] == 1){
    19. i ++;
    20. }else if(nums[i] == 2){
    21. two--;
    22. swap(nums,i,two);
    23. }else if (nums[i] == 0) {
    24. zero++;
    25. swap(nums,zero,i);
    26. i++;
    27. }
    28. }
    29. }
    30. public void swap(int[] nums, int index1, int index2) {
    31. int temp = nums[index1];
    32. nums[index1] = nums[index2];
    33. nums[index2] = temp;
    34. }
    35. }