我有一个包含一百万个数字的文件。 我需要知道如何有效地对其进行排序,以免使计算机停滞不前,并且仅打印前十名。
#!/usr/bin/python3
#Find the 10 largest integers
#Don't store the whole list
import sys
def fOpen(fname):
try:
fd = open(fname,"r")
except:
print("Couldn't open file.")
sys.exit(0)
all = fd.read().splitlines()
fd.close()
return all
words = fOpen(sys.argv[1])
big = 0
g = len(words)
count = 10
for i in range(0,g-1):
pos = i
for j in range(i+1,g):
if words[j] > words[pos]:
pos = j
if pos != i:
words[i],words[pos] = words[pos],words[i]
count -= 1
if count == 0:
print(words[0:10])
我知道这是选择排序,我不确定什么是最好的排序。
这是作业吗? 还是一本书中的练习?
它的功课..
这显然是一个XY问题。 问题不是排序,而是找到十个最大的整数。 尽管可以通过首先排序然后选择前十个条目来找到它们,但这并不是最佳解决方案。 最好的解决方案是百事可乐提供的解决方案。
我不会说百事可乐的解决方案是"最好的",也许是第一个现有的解决方案。 实际上,他实际上没有提供任何有效的代码,但确实表明这是一个XY问题。
如果只需要前10个值,那么您将浪费大量时间对每个数字进行排序。
只需浏览数字列表,并跟踪到目前为止看到的前10个最大值。在浏览列表时更新前十名,并在到达末尾时将其打印出来。
这意味着您只需要对文件进行一次遍历(即theta(n)的时间复杂度)
一个更简单的问题
您可以将您的问题看成是在数字列表中找到最大值的概括。如果给出{2