📅  最后修改于: 2023-12-03 14:58:25.126000             🧑  作者: Mango
这是一道经典的排序习题,需要你实现一个算法,将一个由整数组成的序列排序,并且要求在排序过程中将所有的偶数移动到序列的前面,所有的奇数移动到序列的后面。例如,输入 [2,1,4,3,6,5,8,7,10,9] ,输出为 [2,4,6,8,10,1,3,5,7,9] 。
你需要完成的函数为 sort_array(nums: List[int]) -> List[int]
,其中:
该题需要你实现时间复杂度为 O(n) 的算法,请按照以下步骤设计代码:
使用两个指针 i 和 j ,分别指向序列的头部和尾部。
当 i < j 时,则执行以下步骤:
如果 nums[i] 为偶数,则继续向右移动 i 。
如果 nums[j] 为奇数,则继续向左移动 j 。
如果 nums[i] 为奇数,nums[j] 为偶数,则交换 nums[i] 和 nums[j] 。
最后,i 和 j 继续向右移动和向左移动。
当 i >= j 时,表示已经完成了一次排列。
重复执行步骤二和三,直到完成排序。
以下是日期复杂度为 O(n) 的 Python 代码实现:
from typing import List
def sort_array(nums: List[int]) -> List[int]:
i, j = 0, len(nums) - 1
while i < j:
if nums[i] % 2 == 0:
i += 1
elif nums[j] % 2 != 0:
j -= 1
else:
nums[i], nums[j] = nums[j], nums[i]
i += 1
j -= 1
return nums
你也可以在 LeetCode 题库的 977. Squares of a Sorted Array 和 905. Sort Array By Parity 中找到与本题类似的排序题目。