我一直在探索 Dikstra 分区算法。以下是我给出的:
R = Red
W = White
B = Blue
我有这个未分区的数组。
| W | B | R | W | R | W | B | W | W |
我希望它按以下格式分区:R、W、B 连续。
| R | ? | W | B |
0 i j k n
鉴于:
i = 0
j = n
k = n
n = number of elements
下面是我的算法:
while (i < j)
{
case a[i]:
R : i++;
W : j--; swap(a[i], a[j]);
B : j--; k--; swap(a[i], a[k]); swap(a[i], a[j]);
end case
}
//Done Sorting
输出应该是这样的:
| R | R | W | W | W | W | W | B | B |
我的问题是:
- 我可以减少掉期的数量吗?如果是,如何?
- 如果要划分 4 种颜色,该算法是否适用?
谢谢你。我真的需要理解这个概念。