输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分
my version
快速排序的四种写法
错误记录
- 在函数里要交换数组里的值需要将数组的地址也传过去
class Solution:
def swap(self, a, i, j):
a[i] = a[i]^a[j]
a[j] = a[i]^a[j]
a[i] = a[i]^a[j]
def reOrderArray(self , array ):
lookup_even = 0
lookup_odd = len(array)-1
while lookup_even < lookup_odd:
while lookup_even < lookup_odd and (array[lookup_even] & 1) != 0:
# 找偶数
lookup_even += 1
while lookup_even < lookup_odd and (array[lookup_odd] & 1) != 1:
# 找奇数
lookup_odd -=1
if lookup_even < lookup_odd:
self.swap(array, lookup_even, lookup_odd)
return array
若题目追加保证奇数和奇数,偶数和偶数之间的相对位置不变
类似冒泡 时间O(n^2) 空间O(1)
class Solution:
def reOrderArray(self , array ):
odd_idx = 0
for i in range(len(array)):
if array[i] & 1 == 1:
temp = array[i]
for j in range(i-1, odd_idx-1,-1):
array[j+1] = array[j]
array[odd_idx] = temp
odd_idx += 1
return array
时间O(n) 空间O(n)
class Solution:
def reOrderArray(self , array):
odd = []
even = []
for n in array:
if n & 1 == 1:
odd.append(n)
else:
even.append(n)
return odd+even