リンクします。https://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593
タイトル:全ての偶数アレイの第2の半分に位置し、間の奇数と奇数-偶数と偶数ことを確実にするために、そのようなアレイの前半のすべての奇数一部こと、アレイ内の数字の順序を調整する機能を実現するために、整数の配列を入力し相対位置変わらず。
アイデア:スペースのための時間、偶数保存の配列で開かれたが、元の配列の末尾に元の配列、一時配列に格納偶数と左に奇数移動し、最終的にも、一時的な配列をスキャンします。
例えば
ソースアレイ{3,4,5,7,8,2,9}
初めはこれです:
左から右へスキャン、最初の数は3で、奇数は、(実際に代えて)、挿入ポインタに3を入れ、そして右へ、その後、挿入ポインタが移動するように、スキャンポインタはまた、右に移動させます。
そう:
今4へのスキャン、一時配列、およびスキャンポインタ前方に入れて、偶数です。
そう:
5について、走査される5に挿入ポインタを置き、右にカーソルポインタを移動し、奇数であり、スキャンポインタはまた、右に移動させます。
そう:
7スキャン、奇数であり、7で挿入ポインタを置き、右にカーソルポインタを移動し、スキャンポインタはまた、右に移動させます。
そう:
今8をスキャンし、一時配列、およびスキャンポインタ前方に入れて、偶数です。
そう:
そして:
最後に:
これまでのところ、左側は奇数を完了したとさえ選出されました。
元の配列にしても、一時的な配列の隣にすることができます。
コード
1 /** 2 * @author yuan 3 * @version 0.1 4 * @date 2019/6/6 5 */ 6 public class ReOrderArray { 7 8 public static void print(int[] array) { 9 for (int i = 0; i < array.length; i++) { 10 System.out.print(array[i]); 11 if (i == array.length - 1) { 12 System.out.println(); 13 } else { 14 System.out.print(" "); 15 } 16 } 17 } 18 19 public static void reOrderArray(int[] array) { 20 // 保存偶数 21 int[] temp = new int[array.length]; 22 // 当前偶数数量 23 int count = 0; 24 // 当前填入位置,第一轮for循环用于奇数左移,第二轮用于填入偶数 25 int pos = 0; 26 for (int i = 0; i < array.length; i++) { 27 if ((array[i] & 1) == 0) { 28 temp[count++] = array[i]; 29 } else { 30 array[pos++] = array[i]; 31 } 32 } 33 for (int i = 0; i < count; i++) { 34 array[pos++] = temp[i]; 35 } 36 } 37 38 public static void main(String[] args) { 39 int[] array = new int[]{3, 4, 5, 7, 8, 2, 9}; 40 print(array); 41 reOrderArray(array); 42 print(array); 43 } 44 }