题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解法一:类似冒泡排序
public class Solution {
public void reOrderArray(int [] array) {
boolean flag = true; //是否退出while的标志
boolean change; //本次有没有交换操作发生
int temp;
while(flag) {
//每一趟
change = false;
for(int i = 0; i <= array.length-2; i++) {
if(array[i] % 2 == 0 && array[i+1] % 2 != 0) {
//前偶,后奇
temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
change = true;
}
}
if(change == true) {
flag = true;
} else {
flag = false;
}
}
}
}
解法二:类似插入排序
public class Solution {
public void reOrderArray(int [] array) {
//类似插入排序
for(int i = 1; i < array.length; i++) {
int target = array[i];
//如果target是奇数,需要调整
if(target % 2 != 0) {
int j;
for(j = i-1; j >= 0; j--) {
if(array[j] % 2 == 0) {
//偶数后移
array[j+1] = array[j];
} else {
//碰到第一个奇数,退出
break;
}
}
array[j+1] = target;
}
}
}
}