荷兰国旗 pr0blem 和排序之间的区别

Difference between dutch flag pr0blem and sorting

我正在阅读 Dutch national flag problem 但我不明白:为什么这与简单的排序问题不同?

我的意思是:如果我们将 0 分配给红色,将 1 分配给白色,将 2 分配给蓝色,然后进行标准快速排序或其他任何操作。为什么我得不到正确答案?

我是不是漏掉了什么?

荷兰国旗问题只是更一般的排序问题的特例,其中唯一允许的元素是 0、1 和 2。您完全可以使用标准排序算法解决它。

这个问题本身很有趣,部分是出于历史原因,但主要是因为很难找到稳定、省时 (O(n)) 和 space-高效 (O(1) )).很容易获得具有这三个属性中的两个的解决方案,但同时获得所有这三个属性(我相信)是一个悬而未决的问题。作为开发快速排序和使用重复键分区的算法的场所,它也很有趣;您可以将 0、1 和 2 视为小于主元、等于主元和大于主元,并且基本上可以对重复元素进行快速排序。

希望对您有所帮助!

在这个问题中,要排序的项目的值范围很小。在这种情况下,可以使用非比较排序(例如,计数排序)对数组进行排序。非比较排序算法可以在 O(n) 中排序,即比快速排序等常规比较排序算法更快。