问题分析:
数字 0, 1, 2 分别代表颜色 红色, 白色, 蓝色
给定一个数组如 [2, 0, 2, 1, 1, 0],对其内部元素进行排序,但不能使用库函数如C++中的sort()函数
解决思路:
因为只有3种颜色代表的3种数字,所以可以采用计数排序法
设一个数组存储三种颜色(三个数字)在原数组中各自的数量,然后按照大小重新赋值
代码实现:
class Solution {
public:
void sortColors(vector<int>& nums) {
int count[3] = {0, 0, 0};
int index = 0;
for (int i = 0; i < nums.size(); i++)
{
count[nums[i]]++;
}
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < count[i]; j++)
{
nums[index++] = i;
}
}
}
};
学习内容:
计数排序