Сортировка Слиянием Очистки


Я заново учусь мои фундаментальные алгоритмы, и был сказан моей Python-это слишком многословный.
Можете ли вы взглянуть на мой сортировка слиянием алгоритм и дайте мне знать, как вы бы очистить его и сделать его более подходящие для Python, если это применимо?

def merge(left,right):
    out = []
    l_rest = []
    i = left[0]
    while i is not None:
        if right:
            if i < right[0]:
                out.append(i)
                left.remove(i)
            else:
                out.append(right[0])
                right.remove(right[0])
        else:
            out.append(i)
            left.remove(i)

         if len(left) > 0:
             i = left[0]
         else:
             i = None
    for i in l_rest:
        out.append(i)
    for i in right:
        out.append(i)
    return out

def sort(lst):
    if len(lst) == 1:
        return lst

    left = sort(lst[:len(lst)//2])
    right = sort(lst[len(lst)//2:])
    return merge(left,right)


146
1
задан 4 апреля 2018 в 02:04 Источник Поделиться
Комментарии
1 ответ

Начиная Вики с предложенной правки в комментариях до сих пор.

def merge(left,right):
out = []
i = left[0]
while i is not None:
if right and i < right[0]:
out.append(i)
left.remove(i)
else:
out.append(right[0])
right.remove(right[0])

if len(left) > 0:
i = left[0]
else:
i = None

return out + left + right

def sort(lst):
if len(lst) == 1:
return lst

left = sort(lst[:len(lst)//2])
right = sort(lst[len(lst)//2:])
return merge(left,right)

-1
ответ дан 10 апреля 2018 в 03:04 Источник Поделиться