很多的排序算法如 冒泡 插入 什么的,都是基于比较的,
这题还可以通过 基于 数据下标的算法: 计数排序 来做
下面的解为 partition 的分区方法, 供参考: 思路: 0放左边 2方右边,遇1直接跳过
class Solution {
public:
void swap(vector<int>& nums, int i, int j){
int temp;
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
void sortColors(vector<int>& nums) {
int i = 0;
int two = nums.size();
int one = -1;
while(i != two){
if(nums[i] == 1){
++i;
}else if(nums[i] == 0){
// swap(nums[i++], nums[++one])
swap(nums, i++, ++one);
}else{
// = 2
// swap(nums[i], nums[--two]);
swap(nums, i, --two);
}
}
}
};