2011-12-03 44 views
1

我正在为Codility做准备。我需要找出什么是最快速的方式来找到一个数值很大,数量很多的数组?用Python排序算法的最快方法

是内置的python排序是最快的还是我需要实现一些其他的排序方法?

+1

目前还不清楚排序算法或查找数组意味着什么。你能否重新解释这个问题,使它更有意义? – 2011-12-03 13:10:56

回答

10

如果您的数据已经在Python中,Python的sort可能是最快的方法。它使用Timsort algorithm,它在随机数据上表现良好,在部分有序数据上表现良好。

如果您只需要最大的物品,请使用heapq.nlargest

+2

heapq.nlargest和heapq.nsmallest:“后两个函数对n的较小值执行效果最好,对于较大的值,使用sorted()函数效率更高。另外,当n == 1时,效率更高使用内置的min()和max()函数。“ – sunqiang

0

使用

list.sort() 

将在地方排序列表的最简单的方法,如果你不介意失去了原有的列表中,您应该使用此方法。

使用

sorted() 

将返回一个新的列表,使得它比list.sort()效率较低,但如果你需要保持原来的名单,这是做到这一点的方式。

2

我从codility.com求职面试现场得到​​的印象是,一个正确的解决方案很快提供,比一个难以调试(但可能更高效)的解决方案更重要。在那个环境中,使用Python的内置排序Timsort,对于排序大数组的大数组非常有效,它是稳定的,并且排序合适。

+0

你能告诉我我需要什么来准备进行编码测试吗? – codersofthedark

+5

我不知道需要什么,但我根据我对网站上的两个句子的评论:“Codility通过筛选出不能编写 正确程序的求职者节省了软件人才招聘人员的时间。Codility管理短程序设计测试 并检查无论解决方案是否坚实。“这两个句子都强调程序的正确性。第二个也建议避免角落案例问题;通常使用率较高的库例程的可能性较小。 –

+0

@ jwpat7:当您在Codility上进行测试时,您有时间限制,但您的解决方案正在分配一个复杂性笔记。看起来效率很高,工作起来,但“难以理解”的解决方案比起简单而快速的方法要好得多。我可以从为招聘人员准备的演示中看到,Codility为您提供了时间限制,允许招聘人员查看您的代码,但最重要的是脚本的耐用性和速度。目标是脚本尽可能快地返回结果,并为每个可能的输入。 – Tadeck