我正在嘗試編寫一種算法來(lái)計(jì)算數(shù)組中的反轉(zhuǎn)次數(shù)。反轉(zhuǎn)是 A[i] > A[j] 和 i < j。def sort_and_count(L): if len(L)<2: return 0, L else: A = L[:len(L)//2] B = L[len(L)//2:] rA, A = sort_and_count(A) rB, B = sort_and_count(B) r, L = merge_and_count(A,B) return r+rB+rA, Ldef merge_and_count(A,B): i = j = 0 count = 0 L = [] while len(A) > i and len(B) > j: if A[i] <= B[j]: L.append(A[i]) i+=1 else: L.append(B[j]) count = count + (len(A)-1) j+=1 #copy the remaining elements for index in range(i,len(A)): L.append(A[index]) for index in range(j,len(B)): L.append(B[index]) return count, Lsort_and_count(A)[0]算法不正確。對(duì)于這個(gè)輸入 A = [7, 3, 20, 16, 5, 8] 它返回 6。正確答案是 7 (7, 3),(7, 5),(20, 16),(20, 5) ,(20, 8),(16, 5),(16, 8)。對(duì)于某些輸入,答案是正確的。我不確定是什么原因造成的。
1 回答

森林海
TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
我希望我知道它給出正確結(jié)果的輸入是什么。你有一個(gè)錯(cuò)字:len(A) - 1
應(yīng)該是len(A) - i
。
添加回答
舉報(bào)
0/150
提交
取消