(一)题目描述
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
(二)解题思路
1)使用java自带排序函数:Arrays.sort(nums);
2)单指针法:设置一个pre,其表示pre下标及其之前的范围都已排好序,主要使用方法为:首先pre指向当前数组头部,用i遍历当前数组,若找到0,则将nums[i]与pre[i]进行交换,并进行pre++;当i遍历到数组尾端时,此时pre即起之前都是0,且此时pre位置为数1的起点,当此趟遍历完后,表明0、1都以归位,因而剩余的2也已归位
(三)代码如下
class Solution23 {
public void sortColors(int[] nums) {
//单指针法
int pre = 0;
int len = nums.length;
for (int i = pre; i < len; i++) {
if(nums[pre]==0){
pre++;
continue;
}
if (nums[i] == 0) {
int temp=nums[i];
nums[i]=nums[pre];
nums[pre]=temp;
pre++;
}
}
for (int i = pre; i < len; i++) {
if(nums[pre]==1){
pre++;
continue;
}
if(nums[i]==1){
int temp=nums[i];
nums[i]=nums[pre];
nums[pre]=temp;
pre++;
}
}
}
}



