题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
此题运用插入排序
1.遍历整个数组,找奇数,找到了往前面插
2.如果该数是奇数,并且前面一个数是偶数,将该奇数先保存起来,然后将前面的偶数往后面移动
3.如果该数是奇数,并且前面一个数也是奇数,继续往后遍历
public class Solution {
public void reOrderArray(int [] array) {
if(array == null || array.length == 1) {
return;
}
for(int i = 0; i < array.length; i++) {
int insertVal = array[i];//当前待插的数
int insertIndex = i - 1;//待插数前面的一个数
//insertIndex >= 0保证不越界
while(insertIndex >= 0 && insertVal%2==1 && array[insertIndex]%2==0) {
array[insertIndex + 1] = array[insertIndex];
insertIndex--;
}
//插入的条件
if(insertIndex + 1 != i) {
array[insertIndex + 1] = insertVal;
}
}
}
}