题目描述
思路分析
left
追踪0的最右边界
right
追踪2的最左边接
index
追踪当前考虑的元素
沿着数组移动index
指针
若nums[index]=0
,则将其与nums[left]
互换;
若nums[index]=2
,则将其与nums[right]
互换
代码实现
public static void sortColors(int[] nums) {
if (nums==null||nums.length==0) return;
int left=0;//初始化0的最右边界
int right=nums.length-1;//初始化2的最左边界
int index=0;//初始化当前考虑的元素序号
while (index<=right) {
if (nums[index]==0) {//交换第 index个 和 第left个 元素,并将指针都向右移。
swap(nums,index++,left++);
}else if (nums[index]==1) {//将指针index右移。
index++;
}else {//交换第 index个和第 right个元素,并将 right指针左移
swap(nums, index, right--);
}
}
}
public static void swap(int[] nums,int i,int j) {
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}