荷兰国旗问题

184 阅读1分钟

提法 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

解法 考虑到有三种颜色,我们可以用四个边界就能把他们分开,一个是其中红色边界[0,left],白色的边界为[left,right],蓝色的边界为[right,length]。其中0和length是确定的。

我们设初始条件为left=0,right=length;然后利用一个指针来遍历整个数组,遇到红色,就替换到left的位置,遇到蓝色则替换到right的位置。遍历完成后。数组就按想要的队列排序了。 荷兰国旗问题原文链接