题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路:
题目要求偶数和偶数之间的相对位置不变,也就是要求稳定,可以利用一些稳定排序的思想,如插入排序、归并排序等,这里我们可以使用插入排序的思想,数组前面维护一个k大的奇数序列,将后面的奇数一个往前移动,偶数一步步后移
实现代码:
public class Solution {
public void reOrderArray(int [] array) {
if(array == null){
return null;
}
//奇数的个数
int k = 0;
int len = array.length;
for(int i = 0; i < len; i++){
if((array[i] & 1) != 0){
int j = i;
while(j > k){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
j--;
}
k++;
}
}
}
}