输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
public void reOrderArray(int [] array) {
int len = array.length;
if(len <= 1){ // 数组空或长度为1
return;
}
int a1 = 0;
int a2 = array.length-1;
while (a1<array.length){
if (array[a1]%2==1) a1 +=1;
else {
a2 =a1+1;
//找到下一个奇数点
while (array[a2]%2==0){
if (a2 == array.length-1) return;//如果是末尾说明后面全是偶数,直接返回就行。
a2++;
}
//接下来为了保证偶数的相对位置不变,需要将偶数的数组整个向后平移。
int count = a2-a1;
int tem = array[a1];
array[a1] = array[a2];
while (count>1){
array[a1+count] = array[a1+count-1];
count--;
}
array[a1+1] = tem;
a1+=1;
}
}
}
需要借鉴几种排序的思路以保持稳定性。