проблема с питоном с присвоением массива в рекурсивной функции - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь написать функцию для подсчета инверсий массива, используя разделяй и властвуй. Ниже приведена функция:

def count_inv_sort(array):
    if len(array)==1:
        result = (0,array)
    else:
        n1=int(math.floor(len(array)/2))
        n2=len(array)-n1
        #Divide
        array_1=array[:n1]
        array_2=array[-n2:] 

        #Conquer
        (inv1, sorted_array_1)=count_inv_sort(array_1)
        (inv2, sorted_array_2)=count_inv_sort(array_2)

        #Merge
        i=0
        j=0
        inv_count=0
        for k in range(len(array)):
            if (i != len(sorted_array_1)) & (j !=len(sorted_array_2)):
                if sorted_array_1[i]<=sorted_array_2[j]:
                    array[k]=sorted_array_1[i]
                    i=i+1
                    inv_count=inv_count+j
                else:
                    print('before assignment')
                    print(sorted_array_1)
                    array[k]=sorted_array_2[j]
                    print('after assignment')
                    print(sorted_array_1)

                    j=j+1
            elif i == len(sorted_array_1):
                array[k]=sorted_array_2[j]
                j=j+1
            else:               
                array[k]=sorted_array_1[i]
                i=i+1
                inv_count=inv_count+j
        result = (inv_count+inv1+inv2, array)
    return result

Если я выполняю синтаксический анализ в функции со списком ввода, она работает как положено. Но если я анализирую функцию с вводом массива, он возвращает разные результаты. Проблема заключается в предложении else, где я помещаю печать в. Может кто-нибудь помочь объяснить причину, почему функция не работает для массива.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...