# 时间复杂度 nlog(n)
# 按顺序融合两边的list
def merge_list(left_list, right_list):
len_left = len(left_list)
len_right = len(right_list)
# 双指针遍历
idx_left = 0
idx_right = 0
res = []
while idx_left < len_left and idx_right < len_right:
if left_list[idx_left] <= right_list[idx_right]:
res.append(left_list[idx_left])
idx_left += 1
else:
res.append(right_list[idx_right])
idx_right += 1
# 循环结束时,idx_left或idx_right有一个下标,到达数组末尾,将另一个剩余数组合并到末尾
if idx_left < len_left:
res += left_list[idx_left:]
if idx_right < len_right:
res += right_list[idx_right:]
return res
# 分治算法
def merge_sort(nums):
n = len(nums)
if n <= 1:
return nums
# 递归切片用于分治
mid = n // 2
left_list = merge_sort(nums[:mid])
right_list = merge_sort(nums[mid:])
res = merge_list(left_list, right_list)
return res
if __name__ == '__main__':
nums = [6, 2, 5, 9, 1]
res = merge_sort(nums)
print(res)
归并排序 python实现
最新推荐文章于 2024-10-01 05:04:32 发布