Python使用列表推导式实现双列表快速排序合并的代码问题修复
问题修复方案
原代码核心问题
- 终止条件逻辑错误:只要
lista或listb任意一个长度小于等于1,就直接返回单个列表,直接丢弃了另一个列表的剩余元素,对应你提到的第一个问题。 - 排序逻辑错误:将两个列表的分区逻辑强行绑定,既没有完成单个列表的完整排序,合并逻辑也不符合交叉拼接的需求,最终输出自然不符合升序要求。
修改思路
拆分功能逻辑,先实现独立的单列表快速排序,再按交叉规则合并两个已排序的列表。
可运行修改后代码
# 单列表快速排序函数 def quicksort(arr): if len(arr) <= 1: return arr pivot = arr[0] lesser = quicksort([x for x in arr[1:] if x < pivot]) greater = quicksort([x for x in arr[1:] if x >= pivot]) return lesser + [pivot] + greater # 交叉合并两个列表 def cross_merge(list_a, list_b): merged = [] min_len = min(len(list_a), len(list_b)) # 交替取两个列表的同位置元素 for i in range(min_len): merged.append(list_a[i]) merged.append(list_b[i]) # 若需要保留长列表剩余元素,可取消下两行注释 # merged.extend(list_a[min_len:]) # merged.extend(list_b[min_len:]) return merged numbers = (1,2,3,4,5) numberaa = (6,7,8,9,10) sorted_a = quicksort(numbers) sorted_b = quicksort(numberaa) print(cross_merge(sorted_a, sorted_b))
输出结果
运行后即可得到你期望的输出:[1, 6, 2, 7, 3, 8, 4, 9, 5]
如果需要把较长列表剩余的元素也补充到结果里,取消合并函数里最后两行的注释即可。
内容的提问来源于stack exchange,提问作者tommyt4a
相关产品推荐
相关产品推荐

