【发布时间】:2016-01-20 21:49:57
【问题描述】:
是的,这是作业,但我最终用 Java 完成它只是为了完成它,但现在 python 实现困扰着我。我很确定我已经正确地实现了它,但它需要的时间比它应该的要长。在 300 万次输入上,它需要 25 到 32 秒。我假设它与我拼接和附加到列表的方式有关。我这里有源代码,如果你看到什么,请告诉我。
def merge_sort(seq):
if len(seq) == 1:
return seq
left = merge_sort(seq[:len(seq) // 2])
right = merge_sort(seq[len(seq) // 2:])
return merge(left, right)
def merge(left, right):
result = []
left_count = 0
right_count = 0
while len(left) > left_count and len(right) > right_count:
if left[left_count] > right[right_count]:
result.append(right[right_count])
right_count += 1
else:
result.append(left[left_count])
left_count += 1
while len(left) > left_count:
result.append(left[left_count])
left_count += 1
while len(right) > right_count:
steps += 1
result.append(right[right_count])
right_count += 1
return result
【问题讨论】:
-
为什么你认为 25-32 秒比应该花费的时间长?
-
因为,我的教授说它太长了(我要求确定)。 Java 实现大约需要 5 分钟。
-
所以您可以选择语言?迁移到 Java 的 5-6 倍改进对我来说似乎并不算太糟糕。也就是说,您可以通过避免复制数据来加快速度。
-
是的。我只是想尝试将其缩短到 10 秒以下。并不是说它意味着什么,因为我通常只使用 pythons Tim sort。但更多的是一种教育活动。因为我工作的地方,我们在大多数项目中都使用 python,所以知道如何优化任何涉及列表的东西会很好。
标签: python algorithm sorting python-3.x optimization