現(xiàn)有n個(gè)紅白藍(lán)三種不同顏色的小球,亂序排列在一起,請(qǐng)通過(guò)兩兩交換任意兩個(gè)球,使得從左至右,依次是一些紅球、一些白球、一些藍(lán)球。
public class DutchNationalFlag {
private void swap(int[] a, int index1, int index2) {
int temp = a[index1];
a[index1] = a[index2];
a[index2] = temp;
}
public void dutchNationalFlag(int[] a, int n) {
//紅色游標(biāo)
int left = 0;
//藍(lán)色游標(biāo)
int right = n - 1;
//白色游標(biāo)
int cur = 1;
while (cur <= right) {
if (a[cur] == 0) { //紅色
swap(a, left, cur);
left++;
} else if (a[cur] == 1) { //白色
cur++;
} else { //藍(lán)色
swap(a, cur, right);
right--;
}
}
}
public static void main(String[] args) {
int[] a = { 0, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1 };
DutchNationalFlag dFlag = new DutchNationalFlag();
dFlag.dutchNationalFlag(a, a.length);
for (int value : a) {
System.out.print(value);
System.out.print(" ");
}
}
}