题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
若题目没有要求相对位置不变,则设置两个指针first和second,当first<second时分别从前和后查找奇数和偶数,交换即可。
但这里要求相对奇数偶数间顺序不能改变。方法如下:
public void reOrderArray(int [] array) {
if(array == null||array.length <= 1)
return;
for(int i=0;i<array.length;i++)
{
if(array[i]%2 == 0)
{
int j=i+1;
for(;j<array.length;j++)
{
if(array[j]%2 == 1)
break;
}
if(j == array.length)
return;
//只能从后向前移位并插入!!!!!
int temp=array[j];
for(int k=j;k>i;k--)
{
array[k]=array[k-1];
}
array[i]=temp;
}
}
}
public class Solution {
//插入排序思想
public void reOrderArray(int [] array) {
if(array == null || array.length < 2){
return;
}
for(int i = 1;i<array.length;i++){
if(array[i] % 2 == 1){
int temp = array[i];
int j = i-1;
while(j >= 0&&array[j] % 2 == 0){
array[j+1] = array[j];
j--;
}
array[j+1]=temp;
}
}
}
}