に私はPythonで時間の複雑さは、Python
import sys
def mergeSort(array):
if len(array) < 2:
return array
middle = len(array)/2
left = mergeSort(array[:middle])
right = mergeSort(array[middle:])
return merge(left, right)
def merge(left, right):
result = []
while left and right:
if left[0] < right[0]: result.append(left.pop(0))
else: result.append(right.pop(0))
while left: result.append(left.pop(0))
while right: result.append(right.pop(0))
return result
array = map(int, sys.stdin)
print mergeSort(array)
をマージソートを実装しかし、誰かがlist.popの時間計算量は(0)Pythonでの直鎖またはO(n)があることを教えてくれました。その場合、上記のコードはO(n log n)でソートされません。私はそれにどのような変更を加える必要がありますか?
この質問を参照してください:http://stackoverflow.com/questions/7063697/why-is-my-mergesort-so-slow-in-python具体的にはコミュニティwiki/huitseekerの回答。それにはたくさんの種類があります:https://gist.github.com/1146063 – jon