package com.interview.flag.o; import com.interview.utils.ConsoleWriter; /** * Created_By: stefanie * Date: 15-1-30 * Time: 下午12:29 */ public class O20_InplaceInterleavingArray { public void interleaving(int[] array){ interleaving(array, 0, array.length - 1); } private void interleaving(int[] array, int low, int high){ if(high - low < 2) return; //A1 A2 B1 B2; int mid = rotate(array, low, high); interleaving(array, low, mid); interleaving(array, mid + 1, high); } private int rotate(int[] array, int low, int high){ int len = (high - low + 1)/2; int start = low + len/2; int mid = start + (len - len/2) - 1; int end = mid + len/2; reverse(array, start, end); reverse(array, start, mid); reverse(array, mid + 1, end); return mid; } private void reverse(int[] array, int low, int high){ for(int i = 0; i < (high - low + 1)/2; i++){ int temp = array[low + i]; array[low + i] = array[high - i]; array[high - i] = temp; } } public static void main(String[] args){ O20_InplaceInterleavingArray interleaver = new O20_InplaceInterleavingArray(); int[] array = new int[]{1,3,5,7,2,4,6,8}; interleaver.interleaving(array); ConsoleWriter.printIntArray(array); } }