【发布时间】:2018-02-08 04:54:57
【问题描述】:
我正在研究一个hackerrank问题:https://www.hackerrank.com/challenges/big-sorting
并用 Python 编写了 MergeSort 的实现。该算法运行良好,但在一些较大的输入测试中出现超时错误。由于我不是 Python 专家,谁能建议我如何让我的代码更高效?
unsorted = map(int, unsorted) # Unsorted is provided as an input, an array of strings
def mergeSort(list):
s = len(list)
if s == 1:
return list
if s == 2:
if list[0] < list[1]:
return list
return [list[1], list[0]]
listA = mergeSort(list[:s / 2])
listB = mergeSort(list[s / 2:])
r = []
while len(listA) > 0 or len(listB) > 0:
if len(listA) == 0:
r = r + listB
return r
if len(listB) == 0:
r = r + listA
return r
if listA[0] < listB[0]:
r.append(listA.pop(0))
else:
r.append(listB.pop(0))
list = mergeSort(unsorted)
for n in list:
print n
【问题讨论】:
-
如果合并排序完全是错误的算法,我不会感到惊讶。我没有看过挑战,但可能是关于
O(1)排序,如 radixsort 或 bucketsort。你试过内置的sorted吗?如果这也超时,您将无法用纯 Pythonmergesort击败它。 -
@MSeifert - 挑战是对长度为 10^6 个字符的字符串进行排序,因此基数排序不是最佳选择。