题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
错误做法:未考虑顺序不变

def reOrderArray(self, array):
    # write code here
    left = 0
    right = len(array) - 1
    flag_l = 0
    flag_r = 0
    while left < right:
        if flag_l == 1 and flag_r == 1:
            array[left], array[right] = array[right], array[left]
        if array[left] % 2 == 0:
            flag_l = 1
        else:
            left += 1
            flag_l = 0
        if array[right] % 2 != 0:
            flag_r = 1
        else:
            right -= 1
            flag_r = 0
    return array

考虑顺序变化,使用额外空间,一个存奇数,一个存偶数:

o = []
e = []
for i in array:
    if i % 2 == 1:
        o.append(i)
    else:
        e.append(i)
return o + e

不使用额外空间,前奇数后偶数就交换,类似冒泡排序,复杂度O(n*2):

    for i in range(0,len(array)):
        for j in range(len(array)-1,i,-1):
            if array[j-1]%2 ==0 and array[j]%2==1:
                array[j],array[j-1] = array[j-1], array[j]
    return array