Q:给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排序。
此题中,我们使用整数0、1和2分别表示红色、白色和蓝色。
【示例】
输入:[2, 0, 2, 1, 1, 0]
输出:[0, 0, 1, 1, 2, 2]
【注意】
不能使用代码库中的排序函数来解决这道题。
A:
这里使用计数排序。可以看:https://www.cnblogs.com/bqwzx/p/11029264.html
设置一个map,key分别为0,1,2,记录数量,然后按照数量输出(这里用int[]实现的,我发现用map太麻烦了……)
public static void sortColors(int[] num) {
int[] color = new int[3];
if (num == null || num.length == 0)
return;
for (int i = 0; i < num.length; i++) {
color[num[i]]++;
}
for (int i = 0; i < num.length; ) {
for (int j = 0; j < 3; j++) {
while (color[j]-- != 0) {
num[i++] = j;
}
}
}
}