-
题目描述:
-
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
-
输入:
-
每个输入文件包含一组测试案例。
对于每个测试案例,第一行输入一个n,代表该数组中数字的个数。
接下来的一行输入n个整数。代表数组中的n个数。
-
输出:
-
对应每个测试案例,
输入一行n个数字,代表调整后的数组。注意,数字和数字之间用一个空格隔开,最后一个数字后面没有空格。
-
样例输入:
-
5 1 2 3 4 5
-
样例输出:
-
1 3 5 2 4
-
package jzoffer; public class E14ReorderArray { public void order(int [] arr){//这个和快速排序的思想很像,我们可以按照快排的思想来思考这个问题 if(arr == null) return; int i = 0;//定义一个i指针,指向起始位置 int j = arr.length - 1;//定义一个y指针,指向最后的位置 while(i<j){ if(isEven(arr[i]) && !isEven(arr[j])){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; }else if(!isEven(arr[i]) && isEven(arr[j])){ i++; }else if(isEven(arr[i]) && isEven(arr[j])){ j--; }else{ i++; j--; } } } public boolean isEven(int n){ return (n%2) == 0; } public E14ReorderArray() { } public static void main(String[] args) { E14ReorderArray test = new E14ReorderArray(); int[] arr ={1,2,3,4,5,6,7,8,9,10}; System.out.println("原先的数组如下:"); for(int i = 0;i<arr.length;i++){ System.out.print(arr[i]+","); } test.order(arr); System.out.println(""); System.out.println("经过整理的数组如下:"); for(int i = 0;i<arr.length;i++){ System.out.print(arr[i]+","); } } }