针对三色旗(荷兰国旗)问题的原地排序问题算法

 思路 定义三个指针,左指针 当前指针 右指针  

当当前的值为0时,与左指针交换  ,left++ 当前指针++

当为1 时不操作 当前指针++

当为2时与右指针交换  right--    curr 不移动,需重新检查交换后的值

public class SortColors {
    public void sortColors(int[] nums) {
        int left = 0;
        int curr = 0;
        int right = nums.length - 1;
        
        while (curr <= right) {
            if (nums[curr] == 0) {
                swap(nums, curr, left);
                left++;
                curr++;
            } else if (nums[curr] == 1) {
                curr++;
            } else {
                swap(nums, curr, right);
                right--;
            }
        }
    }
    
    private void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}

// 测试示例
public static void main(String[] args) {
    int[] nums = {2, 0, 2, 1, 1, 0};
    new SortColors().sortColors(nums);
    System.out.println(Arrays.toString(nums)); // 输出: [0, 0, 1, 1, 2, 2]
}

你可能感兴趣的:(算法,java,数据结构)