47 lines
1.2 KiB
Java
47 lines
1.2 KiB
Java
import java.util.Arrays;
|
|
import java.util.Random;
|
|
|
|
public class DutchNationalFlag {
|
|
enum DutchColors {
|
|
RED, WHITE, BLUE
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
DutchColors[] balls = new DutchColors[12];
|
|
|
|
DutchColors[] values = DutchColors.values();
|
|
Random rand = new Random();
|
|
for (int i = 0; i < balls.length; i++)
|
|
balls[i] = values[rand.nextInt(values.length)];
|
|
|
|
System.out.println("Before: " + Arrays.toString(balls));
|
|
|
|
dutchNationalFlagSort(balls);
|
|
|
|
System.out.println("After : " + Arrays.toString(balls));
|
|
}
|
|
|
|
private static void dutchNationalFlagSort(DutchColors[] items) {
|
|
int lo = 0, mid = 0, hi = items.length - 1;
|
|
|
|
while (mid <= hi)
|
|
switch (items[mid]) {
|
|
case RED:
|
|
swap(items, lo++, mid++);
|
|
break;
|
|
case WHITE:
|
|
mid++;
|
|
break;
|
|
case BLUE:
|
|
swap(items, mid, hi--);
|
|
break;
|
|
}
|
|
}
|
|
|
|
private static void swap(DutchColors[] arr, int a, int b) {
|
|
DutchColors tmp = arr[a];
|
|
arr[a] = arr[b];
|
|
arr[b] = tmp;
|
|
}
|
|
}
|