【发布时间】:2015-07-04 17:51:14
【问题描述】:
我正在阅读Dutch national flag problem,但我不明白:为什么这与简单的排序问题不同?
我的意思是:如果我们将 0 分配给红色,将 1 分配给白色,将 2 分配给蓝色并进行标准的快速排序或其他什么......为什么我不能得到正确的答案?
我错过了什么吗?
【问题讨论】:
标签: algorithm sorting language-agnostic
我正在阅读Dutch national flag problem,但我不明白:为什么这与简单的排序问题不同?
我的意思是:如果我们将 0 分配给红色,将 1 分配给白色,将 2 分配给蓝色并进行标准的快速排序或其他什么......为什么我不能得到正确的答案?
我错过了什么吗?
【问题讨论】:
标签: algorithm sorting language-agnostic
荷兰国旗问题只是更一般的排序问题的一个特例,其中唯一允许的元素是 0、1 和 2。您完全可以使用标准排序算法来解决它。
这个问题本身很有趣,部分原因是历史原因,但主要是因为找到稳定、时间效率 (O(n)) 和空间效率 (O(1)) 的解决方案具有挑战性。很容易获得这三个属性中的两个的解决方案,但是获得所有三个属性是(我相信)一个悬而未决的问题。它还可以作为开发快速排序和使用重复键分区的算法的场所;您可以将 0、1 和 2 视为小于枢轴、等于枢轴并大于枢轴,并且您基本上可以对重复元素进行快速排序。
希望这会有所帮助!
【讨论】:
在这个问题中,要排序的项目的值范围很小。在这种情况下,可以使用非比较排序(例如计数排序)对数组进行排序。非比较排序算法可以在 O(n) 内进行排序,即比快速排序等常规比较排序算法更快。
【讨论】: