The Dutch national flag problem is to rearrange an array of
Solution
public class NutsAndBolt
{
public static void main(String[] args)
{
char nuts[] = {\'@\', \'#\', \'$\', \'%\', \'^\', \'&\'};
char bolts[] = {\'$\', \'%\', \'&\', \'^\', \'@\', \'#\'};
// Method based on quick sort which matches nuts and bolts
matchPairs(nuts, bolts, 0, 5);
System.out.println(\"Matching nuts and bolts are : \");
print(nuts);
print(bolts);
}
// Method to print the array
private static void print(char[] a) {
for (char ch : a){
System.out.print(ch + \" \");
}
System.out.print(\"\ \");
}
private static void matchPairs(char[] nuts, char[] bolts, int low,
int high)
{
if (low < high)
{
int pivot = partition(nuts, low, high, bolts[high]);
partition(bolts, low, high, nuts[pivot]);
matchPairs(nuts, bolts, low, pivot-1);
matchPairs(nuts, bolts, pivot+1, high);
}
}
private static int partition(char[] arr, int low, int high, char pivot)
{
int i = low;
char temp1, temp2;
for (int j = low; j < high; j++)
{
if (arr[j] < pivot){
temp1 = arr[i];
arr[i] = arr[j];
arr[j] = temp1;
i++;
} else if(arr[j] == pivot){
temp1 = arr[j];
arr[j] = arr[high];
arr[high] = temp1;
j--;
}
}
temp2 = arr[i];
arr[i] = arr[high];
arr[high] = temp2;
// Return the partition index of an array based on the pivot
// element of other array.
return i;
}
}
==============================================
Output:
Matching nuts and bolts are :
# $ % & @ ^
# $ % & @ ^

