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