本问题被称为 荷兰国旗问题
,最初由 Edsger W. Dijkstra提出。
public static void sortColors(int[] nums) {
// 对于所有 idx < i : nums[idx < i] = 0
// j是当前考虑元素的下标
int p0 = 0, curr = 0;
// 对于所有 idx > k : nums[idx > k] = 2
int p2 = nums.length - 1;
int tmp;
while (curr <= p2) {
if (nums[curr] == 0) {
// 交换第 p0个和第curr个元素
// i++,j++
tmp = nums[p0];
nums[p0++] = nums[curr];
nums[curr++] = tmp;
}
else if (nums[curr] == 2) {
// 交换第k个和第curr个元素
// p2--
tmp = nums[curr];
nums[curr] = nums[p2];
nums[p2--] = tmp;
}
else curr++;
}
for (int i = 0; i <nums.length ; i++) {
System.out.print(nums[i]+" ");
}
}
来源:CSDN
作者:ldd儆儆
链接:https://blog.csdn.net/qq_38304320/article/details/103908846