1、先排2,再排1(两趟扫描)
void sortColors(vector<int>& nums) {
int n = nums.size();
int q = n - 1;
int i = 0;
while (i <= q) {//先排2
if (nums[i] == 2) {
swap(nums[i], nums[q]);
q--;
}
else {
i++;
}
}
i = 0;
while (i <= q) {//再排1
if (nums[i] == 1) {
swap(nums[i], nums[q]);
q--;
}
else {
i++;
}
}
}
2、同时排2排0,排1自动进行(一趟扫描)
void sortColors(vector<int>& nums) {
int n = nums.size();
int p = 0, q = n - 1;
int i = 0;
while (i <= q) {//从前往后
if (nums[i] == 2) {
swap(nums[i], nums[q]);
q--;
}
else if(nums[i]==1){
i++;
}
else {
swap(nums[i], nums[p]);
p++;
i++;
}
}
}
当内存都一样时,内存消耗就是一个正态分布了。。。