0
제대로 작동하는 mergesort 함수를 구현했습니다. 그러나 정렬되기 전에 원래 배열의 역전 수를 계산하기가 어렵습니다. i < j but a[i] > a[j]
예는 a = [5,2,1]
3 역전 갖는 경우mergesort의 inversions 카운팅
반전이 쌍 : 위의 예에서는 n은 반전의 횟수로 (15)를 반환한다 (5,2),(5,1),(2,1)
def mergeSort(a):
mid = len(a)//2
if len(a) < 2:
return
l = a[:mid]
r = a[mid:]
mergeSort(l)
mergeSort(r)
return merge(l,r,a)
def merge(l,r,a):
i = 0
j = 0
k = 0
inv = 0
while(i < len(l) and j < len(r)):
if(l[i] < r[j]):
a[k] = l[i]
i = i + 1
else:
a[k] = r[j]
inv = inv + 1
j = j + 1
k = k + 1
while i < len(l):
a[k] = l[i]
i = i + 1
k = k + 1
while j < len(r):
a[k] = r[j]
j = j + 1
k = k + 1
inv = inv + 1
return [a,inv]
a = [6,5,4,3,2,1]
print(mergeSort(a))
을 (N-1)/2의 수이다 내림차순 정렬을위한 역변환.
누군가가 그것을 계산하는 방법을 설명 할 수 있습니까?
[this] (https://stackoverflow.com/questions/14733119/counting-inversions-using-merge-sort) 게시물에 같은 문제에 대한 코드가 있습니다. –