荷兰国旗问题

17 Mar 2025 | 4 分钟阅读

荷兰国旗问题 (DNF) - 这是由 Edsger Dijkstra 提出的一个编程问题。 荷兰国旗由三种颜色组成:白色、红色和蓝色。 任务是随机排列白色、红色和蓝色的球,使相同颜色的球放在一起。 对于 DNF(荷兰国旗问题),我们在线性时间内对 0、1 和 2 的数组进行排序,而不会消耗任何额外的空间。 我们必须记住,此算法只能在具有三个唯一元素的数组上实现。

算法 -

  • 取三个指针,即 - low、mid、high。
  • 我们在开始时使用 low 和 mid 指针,而 high 指针将指向给定数组的末尾。

情况

  • 如果 array [mid] = 0,则将 array [mid] 与 array [low] 交换,并将两个指针都递增一次。
  • 如果 array [mid] = 1,则不需要交换。 将 mid 指针递增一次。
  • 如果 array [mid] = 2,则我们将 array [mid] 与 array [high] 交换,并将 high 指针递减一次。

代码 -

(C 语言)

输出 -

执行算法前的数组:0 1 0 1 2 0 1 2

执行 DNFS 算法后的数组:0 0 0 1 1 1 2 2

DUTCH NATIONAL FLAG

代码 -

(JAVA 语言)

输出 -

执行 DNFS 算法前的数组:0 1 0 1 2 0 1 2

执行 DNFS 算法后的数组:0 0 0 1 1 1 2 2

DUTCH NATIONAL FLAG

代码 -

(PYTHON 语言)

输出 -

执行算法前的数组:0 1 0 1 1 2 0 1 2

执行 DNFS 算法后的数组:0 0 0 1 1 1 1 2 2

DUTCH NATIONAL FLAG
下一个主题最长回文子序列