题目
调整数组顺序使奇数位于偶数之前。输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分,要求时间复杂度为O(n)。
解法
该题的思想让我想到QUICK-SORT中的PARTITIOIN方法思想。借鉴PARTITION方法的思想,得到的算法伪代码如下,时间复杂度为O(n):
ADJUST-ARRAY(int[] array):
int i = 0 - 1;
for j = 0 to array.length:
if array[j] mod 2 != 0:
i = i + 1;
exchange array[i] with array[j];
return array;
方法思路:通过j指针遍历元素,对奇数和偶数进行交换,使得[0 to i] 为奇数,[i+1 to j-1]为偶数,[j to array.length]为待调整元素。同样通过PARTITION的方法中可以看出,对于类似的问题,在代码第4行中的判断条件中,需要将哪种条件下的元素放到数组前面就将这种条件写在这一行中。