120 种输入的比较次数加起来是多少
把全部 120 种排列的比较次数加总:
from itertools import permutations
def qs_cmp(a):
"""总是拿第一个当 pivot 的快排,返回比较次数"""
c = 0
def go(x):
nonlocal c
if len(x) <= 1:
return
p = x[0]
c += len(x) - 1
go([y for y in x[1:] if y < p])
go([y for y in x[1:] if y >= p])
go(list(a))
return c
P = list(permutations(range(5)))
print(sum(qs_cmp(p) for p in P))
全部评论