基于归并排序的订单排序程序输出错误,请求技术排查
问题排查与修复
错误原因分析
- 排序结果未被接收:你的归并排序函数
sort是返回新的排序后列表,而非原地修改传入的列表。但主程序中仅调用sort(order_list),没有将返回值重新赋值给order_list,导致后续遍历的还是原始的未排序列表,所以输出是原始的ID顺序1 2 3。 - 输出格式不符合要求:当前代码最后会输出一个多余的空格,而非预期的换行结尾。
修复后的代码
#!/usr/bin/env python3 import sys class Order: def __init__(self, id: int, selection_time: int, shipping_time: int): self.id: int = id self.selection_time: int = selection_time self.shipping_time: int = shipping_time def merge(left, right): if not len(left) or not len(right): return left or right result = [] i, j = 0, 0 while len(result) < len(left) + len(right): # 提取总时间,让比较逻辑更清晰 left_total = left[i].selection_time + left[i].shipping_time right_total = right[j].selection_time + right[j].shipping_time if left_total < right_total: result.append(left[i]) i += 1 else: result.append(right[j]) j += 1 if i == len(left) or j == len(right): result.extend(left[i:] or right[j:]) break return result def sort(order_list): if len(order_list) < 2: return order_list middle = int(len(order_list) / 2) left = sort(order_list[:middle]) right = sort(order_list[middle:]) return merge(left, right) if __name__ == '__main__': data = input().strip() data = data.split('; ') order_list = [] for d in data: id_str, selection_t_str, shipping_t_str = d.split(', ', 2) order = Order(int(id_str), int(selection_t_str), int(shipping_t_str)) order_list.append(order) # 接收排序后的列表 sorted_orders = sort(order_list) # 直接拼接成符合要求的输出格式 sys.stdout.write(' '.join(str(order.id) for order in sorted_orders) + '\n')
关键修复点说明
- 接收排序结果:将
sort(order_list)的返回值赋值给sorted_orders,后续遍历这个已排序的列表,确保输出的是排序后的结果。 - 优化输出逻辑:使用
' '.join()直接生成空格分隔的ID字符串,避免末尾出现多余空格,最后添加换行符完全匹配预期输出格式。 - 可读性优化:将拣选+配送的总时间计算单独提取为变量,让比较逻辑更直观,便于维护。
内容的提问来源于stack exchange,提问作者user12417778
相关产品推荐
相关产品推荐

