1题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
2.解题思路
对数组进行遍历,设置两个指针even和odd,even指向当前第一个偶数,odd从这个偶数之后开始查找,找到第一个奇数,此时为了相对位置不变,不能直接交换even和odd,而是将从even到odd-1的元素都依次向后移一个位置,将odd指向的那个奇数放到even的位置。然后再找下一个偶数,重复这一过程,最终就可以将奇数都放到偶数的前面,并且保证了相对位置的不变。
3.编程实现(Java):
public class reOrderArray_44 {
public static void main(String[] args) {
int[] array = {1, 4, 5, 6, 9, 7, 2, 8, 3};
reOrderArray(array);
System.out.println(Arrays.toString(array));
}
public static void reOrderArray(int[] array) {
int len = array.length;
int even = 0, odd = 0;
while (odd < len && even < len) {
while (even < len && array[even] % 2 != 0)
even++;
odd = even + 1;
while (odd < len && array[odd] % 2 == 0)
odd++;
if (odd >= len)
break;
int temp = array[odd];
for (int i = odd; i > even; i--)
array[i] = array[i - 1];
array[even] = temp;
even++;
}
}
}