需求
根据快速排序算法,求一个列表中第n大的数字
常规解法
把列表从大到小排序,直接取索引为 n-1 的数字
优化解法
根据快速排序的想法,可以在排序完成之前,就可以找到第n大的数字文章来源:https://www.toymoban.com/news/detail-510951.html
def top_n(ls, n):
pivot = ls[0]
# left = []
# middle = []
# right = []
# for each in ls:
# if each < pivot:
# left.append(each)
# elif each == pivot:
# middle.append(each)
# else:
# right.append(each)
left = [each for each in ls if each < pivot]
middle = [each for each in ls if each == pivot]
right = [each for each in ls if each > pivot]
if len(right) < n:
n = n - len(right)
if len(middle) < n:
return top_n(left, n - len(middle))
else:
return pivot
else:
return top_n(right, n)
使用列表表达式,代码短一些,不过多了两层循环,建议使用正常的循环文章来源地址https://www.toymoban.com/news/detail-510951.html
到了这里,关于【Python】快速排序求第N大的数字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!