Я пытаюсь реализовать алгоритм сортировки рекурсивного слияния только с функциями, которые ничего не возвращают, но мне трудно заставить его работать. Кажется, что он разбивает списки и правильно сортирует их, но не переносит эти отсортированные списки в следующий рекурсивный вызов.Python Рекурсивное слияние Сортировка не работает
def merge(list1, list2):
result = []
i = 0
j = 0
k = 0
while i < len(list1) and j < len(list2):
if list1[i] < list2[j]:
result.append(list1[i])
i+=1
else:
result.append(list2[j])
j+=1
k+=1
while i < len(list1):
result.append(list1[i])
i+=1
k+=1
while j < len(list2):
result.append(list2[j])
j+=1
k+=1
print(result)
def merge_sort(inplist):
if int(len(inplist)) >1:
mid = len(inplist)//2
left = inplist[0:mid]
right = inplist[mid:]
merge_sort(left)
merge_sort(right)
merge(left,right)
test = [1,4,7,2,6,9,8,5,3,0]
merge_sort(test)
print(test)
merge_sort - рекурсивная функция, правильно ли она переносит значения со второго или третьего уровня рекурсии? –
@AnandSKumar Я думаю, это зависит от того, как вы его настроили, но я думаю, что это должно сработать, да. В основном потому, что вы снова назначаете окончательный результат первоначальному списку; любой промежуточный список может быть копиями или ссылками на (части) исходного списка, но это не имеет значения в этот момент. Конечно, это имеет значение в смысле использования памяти; в этом случае вам всегда нужно будет пройти полный список, а также соответствующие начальные и конечные индексы (как это можно сделать на C). – Evert