1. 题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
2. 算法概述
通过count统计奇数个数,通过index指针进行遍历数组,如果新的奇数的index不为count,则该奇数前必有偶数,将count到index区间内的数互换,count++[奇数个数+1]
3. 算法实现
public void reOrderArray(int [] array) {
int count = 0;//用于记录已经排序的奇数个数
int index = 0;
while(index < array.length){
if((array[index] & 1) == 1){//按位与判断数字是否为奇数
if(index != count){//判断奇数是否相连,若index!=count,奇数前有偶数,需要交换
//以下为将该不连续奇数[前面有偶数]换至连续
int temp = array[index];
for(int i = index; i > count; i--){
array[i] = array[i-1];
}
array[count] = temp;
}
count++;//统计奇数个数
}
index++;//指针前移
}
}