ab = [5, 89, 23, 9]
def mergsort(array):
mid = len(array)/2
if mid > 0:
print (array)
mergsort(array[:mid])
mergsort(array[mid:])
print(array)
merg(array)
return array
def merg(array):
print (array)
mid = len(array)//2
left = array[:mid]
right = array[mid:]
i = j = k = 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
array[k] = left[i]
i+=1
else:
array[k] = right[j]
j+=1
k+=1
while i < len(left):
array[k]=left[i]
i+=1
k+=1
while j < len(right):
array[k] = right[j]
j+=1
k+=1
print (array)
mergsort(ab)
print (ab)
Функция слияния сортирует заданный массив и обновляется массив. Но в следующей рекурсии массив, входящий в функцию merg
, не является мутированным массивом.Merge sort in python не обновляет массив после сортировки
В примере, первая сортировка происходит, и [5,89]
и [23,9]
сортируются в [5,89]
и [9,23]
, но объединенный входе в следующей рекурсии [5,89,23,9]
вместо [5,89,9,23]
.
Я не могу найти причину, поскольку мутация массива должна влиять на родительский массив.
Эй, спасибо за это четкое объяснение. Но одно сомнение, которое у меня есть, заключается в том, что, поскольку я изменяю переменную списка в функции слияния, не будет автоматически обновлять массив в сортировке слияния. Я вижу, что этого не происходит, это не происходит. Но не понимаю, почему? – raj
@ user32175, пожалуйста, прочитайте мое объяснение еще раз, обратите особое внимание на ту часть, которая говорит о том, что вы проходите, чтобы «слить» и как «слияние» «знает», которые являются левой и правой частями, которые она должна обрабатывать. – alfasin