обновление значения аргумента, переданного в функцию - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь сортировать слиянием, но значения в списке не обновляются. Я знаю, что аргументы передаются с помощью присваиваний. Но как этот код не работает

def mergeSort(arr):

#add code here

    if len(arr) <2 :
        return
    mid = len(arr)//2

    s1 = arr[:mid]
    s2  = arr[mid:]

    mergeSort(s1)
    mergeSort(s2)

    i= 0 ; j =0 
    while i+j < len(arr):
        if i<len(s1) or j ==len(s2) and s1[i] <s2[j] :
            arr[i+j] = s1[i]
            i +=1
        else :
            arr[i+j] = s2[j]
            j +=1

    return arr
mergeSort(arr)

для ex arr = [5,4,3,2,1] вывод такой же arr, но этот код работает хорошо

def mergeSort(arr):

#add code here
    if len(arr)>1:
        mid=len(arr)//2
        l=arr[:mid]
        r=arr[mid:]
        mergeSort(l)
        mergeSort(r)
        i=j=k=0
        while i<len(l) and j<len(r):
            if l[i]<r[j]:
                arr[k]=l[i]
                i+=1
            else:
                arr[k]=r[j]
                j+=1
            k+=1
        while i<len(l):
            arr[k]=l[i]
            i+=1
            k+=1
        while j<len(r):
            arr[k]=r[j]
            j+=1
            k+=1
    return arr
mergeSort(arr)

Я не знаю, что мне не хватает? Как один обновляет внешний массив, а другой нет.

...