私は、マージソートの再帰的なバージョンを書いています。どのように反復的にマージソートを書いていますか?
def merge(lst1, lst2):
i = j = 0
merged = []
while i < len(lst1) and j < len(lst2):
if lst1[i] <= lst2[j]:
merged.append(lst1[i])
i += 1
else:
merged.append(lst2[j])
j += 1
merged.extend(lst1[i:])
merged.extend(lst2[j:])
return merged
def merge_sort(lst):
if len(lst) < 2:
return lst
else:
middle = len(lst)/2
return merge(merge_sort(lst[:middle]), merge_sort(lst[middle:]))
は、スタック領域を節約するために(そしてキックのために/学習アルゴリズムの純粋な喜び)、私は、反復的に、この関数を記述しようとしています:それは別のmerge
ルーチンを使用しています。しかし、私は最後に別のリストをどのように組み合わせるのか分からないので、これは困難です。
ありがとうございました!
がここに答えを考えてみましょう::ここで
はユニットテストです(私は徹底的にチェックしていませんが、それは一目で私にはそう思える)http://stackoverflow.com/questions/2171517/追加アレイを使用せずに - mergesortを実装する – Marcin