【发布时间】:2018-09-08 23:23:39
【问题描述】:
我想在使用合并排序对列表进行排序时计算列表中有多少反转。到目前为止,这是我的代码,其中“x”计算反转的数量,而其余的则对其进行排序:
import sys
x = 0
def merge_sort(A):
merge_sort2(A, 0, len(A) - 1)
def merge_sort2(A, first, last):
if first < last:
middle = (first + last) // 2
merge_sort2(A, first, middle)
merge_sort2(A, middle + 1, last)
merge(A, first, middle, last)
def merge(A, first, middle, last):
global x
L = A[first:middle + 1]
R = A[middle + 1:last + 1]
L.append(sys.maxsize)
R.append(sys.maxsize)
i = j = 0
for k in range(first, last + 1):
if L[i] <= R[j]:
A[k] = L[i]
i += 1
else:
A[k] = R[j]
j += 1
x += 1
x += len(L[first + 1:])
当我使用列表调用合并排序时,变量 x 支持给出列表中的反转数量。因此,如果列表为 '[4,3,2,1],x 将为 6。如果列表为 [1,2,3],x 将为 0。只要右边大于但是,留在合并定义中的数字总是太大了。我做错了什么?
【问题讨论】:
-
“反转”是什么意思?还有你想用
x += len(L[first + 1:])做什么? -
@Isac 所以反转就像每对的倒序一样。像 [10,8] 是一个倒置,因为它是倒序/降序。对于该行,我正在尝试计算整个反转列表。
标签: python python-3.x