Я реализовал сортировку слияния и, а также сортировку, хотел бы вычислить число inversions в исходном массиве.Подсчет количества инверсий в сортировке слияния
Ниже приведена моя попытка его реализации, которая по какой-то причине не вычисляет количество инверсий правильно.
Например, mergeSort([4, 3, 2, 1])
должен вернуть (6, [1, 2, 3, 4])
.
def mergeSort(alist):
count = 0
if len(alist)>1:
mid = len(alist)//2
lefthalf = alist[:mid]
righthalf = alist[mid:]
mergeSort(lefthalf)
mergeSort(righthalf)
i=0
j=0
k=0
while i < len(lefthalf) and j < len(righthalf):
if lefthalf[i] < righthalf[j]:
alist[k]=lefthalf[i]
i=i+1
else:
alist[k]=righthalf[j]
count +=len(lefthalf[i:])
j=j+1
k=k+1
while i < len(lefthalf):
alist[k]=lefthalf[i]
i=i+1
k=k+1
while j < len(righthalf):
alist[k]=righthalf[j]
j=j+1
k=k+1
return count, alist
Можете ли вы пояснить, что вы называете «инверсией», пожалуйста? – tagoma
Число изменений, необходимых для заказа массива. –
Отступ неправильно. Это затрудняет выполнение этого. Глядя на это. –