《剑指offer》题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路:从数组的第一个元素开始判断是否为奇数,如果是奇数则将其移动到数组前面(如果数组第一个元素为奇数则不移动,跳出循环继续下一次判断),然后奇数前面的元素依次向后移动。设置变量m记录奇数将要移动的位置。
代码如下:
public class Solution {
public void reOrderArray(int [] array) {
int m = 0;//标记奇数的个数
for(int i=0;i<array.length;i++){
if(array[i]%2==1){//找到的奇数
m++;
if(i==0)
continue;
int tmp = array[i];//记录奇数
int ti = i;
for(;ti>=m;ti--){
array[ti] = array[ti-1];//奇数之前的所有元素往后移动一位
}
array[m-1] = tmp;
}
}
}
}