在python中,排序具有非常大数字的列表的最佳算法是什么 n=input()##0
简短回答:一个项目少于500000的整数列表在排序小数字和排序大数字时,性能差异可以忽略不计。基于列表中的整数范围,数百万个项目中的整数列表将具有截然不同的排序时间 一组快速基准:在python中,排序具有非常大数字的列表的最佳算法是什么 n=input()##0,python,python-2.7,Python,Python 2.7,简短回答:一个项目少于500000的整数列表在排序小数字和排序大数字时,性能差异可以忽略不计。基于列表中的整数范围,数百万个项目中的整数列表将具有截然不同的排序时间 一组快速基准: n=input() ##0<n<10000 m=[] for i in range(n): m.append(input()) m.sort() for i in range(n): print m[i] 使用运行Python 3.5.2的list.sort()进行排序 当N为5000时
n=input() ##0<n<10000
m=[]
for i in range(n):
m.append(input())
m.sort()
for i in range(n):
print m[i]
使用运行Python 3.5.2的list.sort()
进行排序
当N为5000时,两个列表的排序时间均为0.0秒
当N为50000时,排序时间分别为.014秒和.016秒(可忽略差异)
当N为500000时,排序时间分别为.17秒和.23秒(50%的增量,但差异仍然可以忽略不计)
当N为5000000时,排序时间分别为2.1秒和3.6秒(71%的增量,明显的差异)
结论:如果列表大小小于500K个整数,则无论整数范围如何,排序时间都可以忽略不计。op的代码表示N小于10K
一旦进入“数百万个整数”列表,我们就会看到性能的更大波动,特别是在使用不同的python解释器时
list1 = A list of N integers of range 0-100000
list2 = Another list of N integers of range 0-10**50
python中的列表速度很慢。您可以使用一些优化的模块,如
numpy
,以实现更快的数组操作。@MrPyCharm内置的Python列表排序算法非常快。我认为排序时间不应该取决于排序值。您确定您的数字符合数据类型吗?我认为10^50必须表示为浮点数,以防止溢出。可能排序很慢,因为您要将列表中的所有整数来回转换为浮点数?您在将所有数字放入列表时是否尝试过将其转换为浮点数?@peci1-与大多数编译语言(C、Java)不同,Python的整数类型具有无限的精度。@selbie噢,这可以解释不同的复杂性。同样值得注意的是:我看到Python 2.7、Python 3.5和PyPy之间在性能上存在一些巨大差异。不确定Python是否有正式的基准测试,但看到它们之间的差异是很有趣的。@YasiruRandeepa-我很高兴它有帮助,欢迎使用Stack Overflow。如果答案解决了你的问题或回答了你的问题,不要忘记“接受”答案。
def createRandomNumber(number_of_digits):
x = 0
number_of_digits = int(number_of_digits)
for i in range(number_of_digits):
x = x*10 + int(10 * random.random())
return x
def createRandomNumberList(max_digits, count):
l = []
for i in range(count):
l.append(createRandomNumber(random.random()*max_digits+1))
return l
list1 = createRandomNumberList(5, 50000)
list2 = createRandomNumberList(50, 50000)
print("sorting list1")
start1 = time.time()
list1.sort()
end1 = time.time()
print("sorting list2")
start2 = time.time()
list2.sort()
end2 = time.time()
print("time to sort list1: ", end1-start1)
print("time to sort list2: ", end2-start2)