###问题:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
代码如下:
/*=============================解题思路==================================*/
//第一印象:排序题。
//思路一:只挪动偶数,把第一个偶数挪动到最后一个奇数后面,然后依次挪动偶数。
//不可行,gg,太复杂,太难判断。
//思路二:偶数放在一个数组,奇数放在一个数组,最后加在一起。排序完成。
//可行。
/*public class Solution {
public void reOrderArray(int [] array) {
int arrji[] = new arrji[array.length];
int arrou[] = new arrji[array.length];
for(int i = 0;i<array.length;i++){
if(a[i]%2==0) arrou[]=array[i];
else arrji[] = array[i];
}
for(int i = 0;i<=array.length;i++){
arrji[]+=arrou[i];
}
}
}
*/
//自己的思路没错,但是语法很多的错误,对于数组的熟练度不够,
//复习的时间翻看一下数组的知识,再练习一下。
/*============================官方答案======================================*/
/*
整体思路:
首先统计奇数的个数
然后新建一个等长数组,设置两个指针,奇数指针从0开始,偶数指针从奇数个数的末尾开始 遍历,填数
*/
public class Solution {
public void reOrderArray(int [] array) {
if(array.length==0||array.length==1) return; //特殊情况。
int oddCount=0,oddBegin=0;
int[] newArray=new int[array.length]; //创建一个新的数组,长度等于原数组。
for(int i=0;i<array.length;i++){
if((array[i]&1)==1) oddCount++; //统计奇数的个数。
}
for(int i=0;i<array.length;i++){
if((array[i]&1)==1) newArray[oddBegin++]=array[i];//奇数从0开始;
else newArray[oddCount++]=array[i]; //偶数从奇数的末尾开始。
}
for(int i=0;i<array.length;i++){
array[i]=newArray[i]; //得到目标数组。
}
}
}