int count[3] = {0}; // 存放0, 1, 2三个元素的频率 for(int i = 0 ; i < nums.size() ; i ++){ assert(nums[i] >= 0 && nums[i] <= 2); count[nums[i]] ++; }
int index = 0; for(int i = 0 ; i < count[0] ; i ++) nums[index++] = 0; for(int i = 0 ; i < count[1] ; i ++) nums[index++] = 1; for(int i = 0 ; i < count[2] ; i ++) nums[index++] = 2; } };
三路快排
设置三个指针,分别 zero 指向 0 元素的后一位,two 指向 2 元素的前一位,i 指向 1 元素,当 i > two 时,停止遍历。