mergesort代码如下:
def merge_lists(left, right):
res = []
lc = rc = 0
while lc < len(left) and rc < len(right):
if left[lc] <= right[rc]:
res.append(left[lc])
lc += 1
else:
res.append(right[rc])
rc += 1
res.extend(left[lc:])
res.extend(right[rc:])
return res
def merge_sort(li):
if len(li) == 1:
return li
# split
mid_index = len(li) // 2
left = merge_sort(li[:mid_index])
right = merge_sort(li[mid_index:])
# merge
return merge_lists(left, right)
merge的过程里可以统计逆序对的个数。
inversion_count = 0
def merge_lists(left, right):
global inversion_count
res = []
lc = rc = 0
while lc < len(left) and rc < len(right):
if left[lc] <= right[rc]:
res.append(l