Dutch National Flag Problem (DNFP)
不使用额外的存储空间,将三组数按顺序排列。
三个旗帜问题,也可以用于三组数字,都是类似的。
http://www.iis.sinica.edu.tw/~scm/ncs/2010/10/dutch-national-fl
void three_way_partition(int a[], int n)
{
int p = -1;
int q = n;
int i = 0;
while (i < q)
{
if (a[i] == 1)
{
++p; swap(a[i], a[p]); ++i;
}
else if (a[i] == 2)
{
++i;
}
else
{
--q; swap(a[i], a[q]);
}
}
}
如果有多于三种元素,则称为 America Flag Problem, 本质上是 radix sort