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 :
 # $ % & @ ^
 # $ % & @ ^


