Как итеративно написать сортировку слиянием?

Я написал рекурсивная версия сортировки слиянием. В нем используется отдельная процедура слияния :

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:]))

Чтобы сохранить пространство стека (и для удовольствия от изучения алгоритмов), я пытаюсь написать эту функцию итеративным способом. Однако мне это сложно, потому что я не уверен, как объединить разрозненные списки в самом конце.

Спасибо!

6
задан Marcin 11 January 2012 в 16:58
поделиться