題意:給一個數組,要求使數組中奇數位於偶數前面且奇數與奇數,偶數與偶數之間相對位置不變
思路:可以用額外空間的話很簡單,開一個數組存奇數或者偶數即可;要求原地更改的話可以用指針,一個存偶數開始位置,另一個存偶數結束位置,每遇到一個偶數向後遍歷直到遇到奇數,再把這個奇數放到開頭,其餘偶數元素向右移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++;
}
}
}