【发布时间】:2018-02-08 00:31:06
【问题描述】:
我正在阅读 Skiena 的算法设计手册,但无法解决这个问题。
假设数组 A 由 n 个元素组成,每个元素是红色、白色或蓝色。我们 寻求对元素进行排序,以使所有红色排在所有白色之前 在所有的忧郁之前唯一允许的键操作是
Examine(A,i) { report the color of the ith element of A.
Swap(A,i,j) { swap the ith element of A with the jth element.
找到一个正确有效的红白蓝排序算法。有一个线性时间 解决方案。
我尝试使用快速排序,在 3 个枢轴上,我应该能够解决它,但是当我在快速排序中看到重复时,我不知道该怎么办。
【问题讨论】:
-
那么我该如何处理呢?现在我正式没有办法。顺便说一句,这不是怎么回事,我只是在为面试做准备。
-
每种颜色的计数 O(n);修复索引;相应地定位颜色 O(n)。
-
还有 google 的荷兰国旗算法。
-
@DoSparKot 请仔细阅读问题。我只能使用交换和检查。
-
你为什么沉迷于使用快速排序?没必要!
标签: algorithm language-agnostic