Turbo排序 - 超出时间限制

时间:2013-07-02 16:12:33

标签: python algorithm sorting

我正在尝试解决Codechef问题(Turbo Sort)。问题是

  

鉴于数字列表,您要对它们进行非递减排序   订购。

     

输入

     

t - 列表中的数字,然后t行跟随[t <= 10 ^ 6]。

     

每行包含一个整数:N [0 <= N <= 10 ^ 6]

     

输出

     

以非递减顺序输出给定数字。

     

实施例

     

输入:

     

5 5 3 6 7 1

     

输出:

     

1 3 5 6 7

我的解决方案是:

l = []
t = input()
MAX = 10**6
while t <= MAX and t != 0:
    n = input()
    l.append(n)
    t = t - 1
st = sorted(l)
for x in st:
    print x

挑战是这个程序应该在5秒内运行。当我提交文件时,codechef表示它超出了时间并且需要优化。

有人可以帮助,如何优化它?

2 个答案:

答案 0 :(得分:3)

我接受的解决方案:

import sys
from itertools import imap
T = int(raw_input())
lines = sys.stdin.readlines()
lis = imap(str, sorted(imap(int, lines)))
print "\n".join(lis)

可读版本(已接受的解决方案):

import sys
T = raw_input()           
lines = sys.stdin.readlines() #fetch all lines from the STDIN
lines.sort(key=int)           #sort the list in-place(faster than sorted) 
print "\n".join(lines)        #use `str.join` instead of a for-loop

答案 1 :(得分:2)

应该支持像readlines这样的东西。我刚刚做了一个尝试,并将其作为一个公认的解决方案:

import sys
print '\n'.join(map(str, sorted(map(int, sys.stdin.read().split()[1:]))))

不漂亮但功能齐全。在我弄清楚你必须跳过第一个数字之前,我先找了一点,调试对这个系统来说有点烦人;)