Я пытаюсь написать функцию для подсчета инверсий массива, используя разделяй и властвуй.
Ниже приведена функция:
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, где я помещаю печать в.
Может кто-нибудь помочь объяснить причину, почему функция не работает для массива.
Спасибо!