【发布时间】:2014-04-30 02:17:36
【问题描述】:
我有大量非常小的列表需要尽快排序。通常这些列表中有 2-3 个值,而内置的排序方法似乎有太多的开销。在这种情况下可以进行简单的冒泡排序吗?
例如,要排序:
[1, 5]
[4, 2]
[3, 7]
...
收件人:
[1, 5]
[2, 4]
[3, 7]
...
现在我正在做这样的事情:
def do_something( ilist ):
ilist = sorted(ilist, reverse = True);
return ilist;
for i in range(1000000000):
do_something( [random_num,random_num ] );
谢谢。
【问题讨论】:
-
是什么让你觉得内置函数开销太大?
-
Python 的内置排序实际上相当快。它根据输入的大小调整它使用的算法,对于小列表,它最终会使用插入排序。它也是用 C 语言实现的,所以它可能比你在纯 Python 中想出的任何东西都要快。见en.wikipedia.org/wiki/Timsort
-
规则:永远不要使用冒泡排序。
-
我的代码在排序时慢了 7 倍,这似乎很多,因为大约一半的列表已经排序。如果元素乱序,我只需要一种方法来交换元素,这看起来不像是指数运算