题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 思路一:新建一个数组,以空间换时间
1.遍历整个数组,如果是奇数,从头部放入原数组,并记录指针
2.如果是偶数,放入新建的数组中,记录指针
3.将新数组中的元素按顺序放到原数组中后面
public void reOrderArray(int [] array) {
//解法一:新创建一个数组,以时间换空间
int[] newArray = new int[array.length];
int oldIndex = 0;
int newIndex = 0;
for (int num : array) {
if (num % 2 == 1) {
array[oldIndex++] = num;
} else {
newArray[newIndex++] = num;
}
}
for (int i = 0; i < newIndex; i++) {
array[oldIndex + i] = newArray[i];
}
}
- 思路二:利用简单插入排序的思想
public void reOrderArray(int [] array) {
//解法二:利用插排思想
for (int i = 0; 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;
}
}
}