package com.interview.books.ninechapter; import com.interview.utils.ArrayUtil; import com.interview.utils.ConsoleWriter; /** * Created_By: stefanie * Date: 14-12-12 * Time: 下午5:44 */ public class NC12_ZigZagReorder { public void reorder(int[] array){ int flag = getInitFlag(array); int front = 0, back = 1; while(back < array.length){ if(array[front] * flag > 0){ front++; back++; } else { while(back < array.length && array[back] * flag < 0) back++; if(back > array.length) break; ArrayUtil.swap(array, front++, back++); } flag = -1 * flag; } } public void reorderKeep(int[] array){ int flag = getInitFlag(array); int front = 0, back = 1; while(back < array.length){ if(array[front] * flag > 0){ front++; back++; } else { while(back < array.length && array[back] * flag < 0) back++; if(back > array.length) break; rotate(array, front++, back++); } flag = -1 * flag; } } private int getInitFlag(int[] array){ int positive = 0; int negative = 0; for(int i = 0; i < array.length; i++){ if(array[i] > 0) positive++; else negative++; } return positive >= negative? 1 : -1; } private void rotate(int[] array, int start, int end){ ArrayUtil.reverse(array, start, end - 1); ArrayUtil.reverse(array, start, end); } public static void main(String[] args){ NC12_ZigZagReorder reorder = new NC12_ZigZagReorder(); int[] array = new int[]{1, 2, 3, -4}; reorder.reorder(array); ConsoleWriter.printIntArray(array); //1, -4, 3, 2 array = new int[]{1,-3,2,-4,-5}; reorder.reorder(array); ConsoleWriter.printIntArray(array); //-3, 1, -4, 2, -5 array = new int[]{1, 2, 3, -4}; reorder.reorderKeep(array); ConsoleWriter.printIntArray(array); //1, -4, 2, 3 } }