我们使用 三路快排(荷兰国旗算法) 进行原地排序,主要思想是:
维护 三个指针:
low 指向 0 的最右边界(即 0 应该放置的位置)。mid 当前遍历的元素索引。high 指向 2 的最左边界(即 2 应该放置的位置)。遍历数组:
nums[mid] == 0,交换 nums[mid] 和 nums[low],然后 low++,mid++。nums[mid] == 1,mid++ 继续遍历。给定一个长度为 n 的数组 nums,其中包含 红色、白色 和 蓝色 三种颜色,分别用整数 0、1 和 2 表示。请对 nums 进行 原地排序,使得相同颜色的元素相邻,并按 红色、白色、蓝色 顺序排列。
要求 不使用 内置排序函数。
输入包含两行:
nums,其中 nums[i] ∈ {0, 1, 2}。输出一行,表示排序后的数组,元素之间用 空格 分隔。
6
2 0 2 1 1 0
0 0 1 1 2 2
3
2 0 1
0 1 2