public class ReverseArray { public static void main(String[] args) { int[] x0 = {}; int[] x1 = {1}; int[] x2 = {1,2}; int[] x3 = {1,2,3}; int[] x4 = {1,2,3,4}; int[] x5 = {1,2,3,4,5}; int[] x6 = {1,2,3,4,5,6}; int[] x7 = {1,2,3,4,5,6,7}; int[] x8 = {1,2,3,4,5,6,7,8}; print(flip1(x0)); print(flip1(x1)); print(flip1(x2)); print(flip1(x3)); print(flip1(x4)); print(flip1(x5)); print(flip1(x6)); print(flip1(x7)); print(flip1(x8)); } public static int[] flip1(int[] x) { print(x); flip2(x, 0, x.length-1); return x; } public static void flip2(int[] x, int a, int b) { if (a >= b) return; else { int L = b-a+1; int L1 = a; int R1 = a+L/2-1; int L2 = a+L/2+L%2; int R2 = b; int adj = R1-L1+1+L%2; for (int i = a; i <= R1; i++) { int tmp = x[i]; x[i] = x[i+adj]; x[i+adj]=tmp; } flip2(x,L1,R1); flip2(x,L2,R2); } } public static int[] flip3(int[] x) { int[] result = {}; if (x.length <= 1) result = x; else { int size = x.length; int right[] = flip3(extract(x,0,(size-1)/2)); int left[] = flip3(extract(x,(size+1)/2,size-1)); result = merge(left,right); } return result; } public static int[] extract(int[] x,int a,int b) { int[] tmp=new int[b-a+1]; for(int i=0 ; i < tmp.length ; i++) tmp[i]=x[i+a]; return tmp; } public static int[] merge(int[] x,int[] y) { int[] tmp=new int[x.length+y.length]; System.arraycopy(x,0,tmp,0,x.length); System.arraycopy(y,0,tmp,x.length,y.length); return tmp; } public static void print(int[] x) { System.out.print("{"); for (int i = 0 ; i < x.length ; i++) { System.out.print(x[i]); if (i < x.length-1) System.out.print(","); } System.out.println("}"); } }