问题描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路
首先想到的是冒泡,把奇数往前面冒,偶数往下沉,奇偶相遇则交换
程序如下:
public class Solution {
public void reOrderArray(int [] array) {
for(int i=0; i<array.length-1; i++){
for(int j=0; j<array.length-i-1; j++){
if(array[j]%2==0 && array[j+1]%2!=0){
array[j] ^= array[j+1];
array[j+1] ^= array[j];
array[j] ^= array[j+1];
}
}
}
}
}
改进版,记录最后交换的位置,减少不必要的比较操作
public class Solution {
public void reOrderArray(int [] array) {
int record = array.length-1;
int pos = 0;
for(int i=0; i<array.length-1; i++){
for(int j=0; j<record; j++){
if(array[j]%2==0 && array[j+1]%2!=0){
array[j] ^= array[j+1];
array[j+1] ^= array[j];
array[j] ^= array[j+1];
pos = j;
}
}
record = pos;
}
}
}