题意:给一个数组,要求使数组中奇数位于偶数前面且奇数与奇数,偶数与偶数之间相对位置不变
思路:可以用额外空间的话很简单,开一个数组存奇数或者偶数即可;要求原地更改的话可以用指针,一个存偶数开始位置,另一个存偶数结束位置,每遇到一个偶数向后遍历直到遇到奇数,再把这个奇数放到开头,其余偶数元素向右移1位,复杂度O(n²)
public class Solution {
public void reOrderArray(int [] array) {
int i = 0, j = 1;
if (array.length <= 1) {
return;
}
while (i < array.length) {
if (array[i]%2 == 0) {
j = i + 1;
while (j < array.length && array[j]%2 == 0) {
j++;
if (j == array.length)
return;
}
int t = array[j];
for (int k = j; k > i; k--) {
array[k] = array[k-1];
}
array[i] = t;
}
i++;
}
}
}