0
分割と征服の方法論を使用して配列の逆位を数えようとしています。しかし、逆転の総数を求めることができません。プログラムが完了した後、最後のステップではなく、その前に行われたすべての逆転の合計ではありません。再帰中の変数の難しさ値
def mergesort(A):
if len(A) <2:
return A
mid = len(A)//2
lefthalf = A[:mid]
righthalf = A[mid:]
mergesort(lefthalf)
mergesort(righthalf)
Total= merge(lefthalf,righthalf,A)
return Total
def merge(left,right,A):
Total = 0
i,j,k = 0,0,0
while i < len(left) and j < len(right):
if left[i] <= right[j]:
A[k] = left[i]
i+=1
k+=1
else:
A[k] = right[j]
j+=1
k+=1
Total+= len(left[i:])
while i < len(left):
A[k] = left[i]
i+=1
k+=1
while j < len(right):
A[k] = right[j]
j+=1
k+=1
return Total
印刷(マージソート([1,5,3,2,4]))
どのようにして合計をmantainことができますか? 説明付きでコードに必要な変更を提案してください。おかげさまで
「Total + = mergesort(左半分)」と「Total + = mergesort(右半分)」をしてはいけませんか?これらの再帰呼び出しからの戻り値は、現在使用されていません。 – gowrath
ルーチンに 'return total return A'があります。どちらですか ? –
@ Jean-FrançoisFabreリターン合計 –