我正在阅读Dutch national flag problem并且我不明白:为什么这与简单的排序问题不同?
我的意思是:如果我们将0分配给红色,1分配给白色,2分配给蓝色并做标准的快速排序或其他什么......为什么我得不到正确答案?
我错过了什么吗?
答案 0 :(得分:1)
荷兰国旗问题只是更一般的排序问题的一个特例,其中唯一允许的元素是0,1和2.您可以使用标准排序算法绝对解决它。
由于历史原因,这个问题本身就很有趣,但很大程度上是因为找到稳定,时间有效(O(n))和节省空间的解决方案(O(1))具有挑战性。 。使用这三个属性中的两个很容易获得解决方案,但获得所有三个属性(我相信)是一个开放的问题。作为开发用于快速排序和使用重复键进行分区的算法的场所,它也很有趣;你可以认为0,1和2小于枢轴,等于枢轴,并且大于枢轴,你基本上可以快速排序重复元素。
希望这有帮助!
答案 1 :(得分:0)
在此问题中,要排序的项目的值范围很小。在这种情况下,可以使用非比较排序(例如,计数排序)来对数组进行排序。非比较排序算法可以在O(n)中排序,比常规比较排序算法(如quicksort)更快。