输入一个无序整数数组,调整数组中数字的顺序, 所有偶数位于数组的前半部分,使得所有奇数位于数组的后半部分。
要求时间复杂度为O(n)。
给定无序数组。
长度不超过1000000。
所有偶数位于数组的前半部分,所有奇数位于数组的后半部分。
如果有多个答案可以输出任意一个正确答案。
2 4 5 7 8 1
2 4 8 7 5 1
请自觉使用O(n)的算法。
class Solution(object):
def order(self):
#获取输入的整数列表
array = list(map(int,input().split(' ')))
#用空间换取时间,建一个列表来保存结果
res = []
for i in array:
#把偶数找出来放到res列表里
if i%2==0:
res.append(i)
for i in array:
#再把奇数找出来尾插到res列表里
if i%2==1:
res.append(i)
print(" ".join(map(str,res)))
s = Solution()
s.order() """"
借鉴快速排序的思想,时间复杂度O(n),空间复杂度O(1)
"""
if __name__ == "__main__":
a = list(map(int, input().strip().split()))
i, j = 0, len(a) - 1
while True:
while i < len(a) and a[i] & 1 == 0: i += 1
while j >= 0 and a[j] & 1 == 1: j -= 1
if i >= j: break
a[i], a[j] = a[j], a[i]
print(' '.join(map(str, a)))