マージソートを実装しました。ソートも同様に元の配列の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
アレイを注文するのに必要な変更の数。 –
インデントが間違っています。それはこれを実行することが困難になります。それを見て。 –