Я пытаюсь понять алгоритмы, пишу их сам. При попытке воспроизвести сортировку слиянием я столкнулся с некоторыми проблемами: левый и правый возвращают значение none-type, и возникает ошибка для len(left) в первом цикле while. Я боролся с кодом и не мог понять, что мне не хватает? Разве он не должен просто зацикливаться до тех пор, пока размер левого и правого списков не уменьшится до 1, что позволит им выйти из цикла if и продолжить следующую часть функции?
def merge_sort(A):
if len(A) < 2:
return A
else:
mid= len(A)//2
left= merge_sort(A[:mid])
right= merge_sort(A[mid:])
i = j = 0
sortedlist = []
while i < len(left) and j < len(right):
if left[i] < right[j]:
sortedlist.append(left[i])
i+=1
else:
sortedlist.append(right[j])
j+=1
while i < len(left):
sortedlist.append(left[i])
i+=1
while j < len(right):
sortedlist.append(right[j])
j+=1
print(str(sortedlist))