Wednesday, November 23, 2011

Reverse Dutch Flag problem


Given an array a1 a2 a3 a4.. b1 b2 b3... convert it to a1 b1 a2 b2 a3 b3 ...

 public static void main(String[] args) {
  int a[]={0,0,0,0,1,1,1,1};
  reverseDutch(a,0,a.length-1);
  for(int b : a)
    System.out.print(b);;
  
 }
 
 public static void reverseDutch(int a[],int low,int high){
  
  if(low==high) return;
  
  int centre=(low+high)/2;
  int start= 1 + (low+centre)/2;
  //swap elements ard centre
  // 00001111 => 00110011 => 01010101
  for(int k=1,i=start;i<=centre;i++,k++){
   int temp=a[i];
   a[i]=a[centre+k];
   a[centre+k]=temp;
   
  }
  
  reverseDutch(a,low,centre);
  reverseDutch(a,centre+1,high);
  
 }


O(n lgn)

No comments:

Post a Comment