Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.
Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.
public class Solution {
public void sortColors(int[] nums) {
int left = 0, right = nums.length - 1;
int i = 0;
while(i <= right){
// 遇到0交換到前面
if(nums[i] == 0){
swap(nums, i, left);
left++;
// 因爲左邊必定有序,所以可以直接i++
i++;
// 遇到2交換到後面
} else if(nums[i] == 2){
swap(nums, i, right);
right--;
} else {
// 遇到1跳過
i++;
}
}
}
private void swap(int[] nums, int i1, int i2){
int tmp = nums[i1];
nums[i1] = nums[i2];
nums[i2] = tmp;
}
}