首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的排序代码的执行时间不一致?

为什么我的排序代码的执行时间不一致?
EN

Stack Overflow用户
提问于 2016-09-10 23:33:14
回答 1查看 355关注 0票数 3

我正在学习python,并实现了一个快速排序算法(有点)。我知道python的sort()方法会更快,但我想知道多少,所以我使用了timeit模块进行比较。

我为sort()方法创建了一个“包装器”函数,因此它使用与我的实现相同的语法(并且不再是就地排序),并为这两个函数调用了timeit.repeat(3, 2000)

以下是我的功能的结果:

代码语言:javascript
复制
[0.00019502639770507812, 0.00037097930908203125, 0.00013303756713867188]

对于python的排序():

代码语言:javascript
复制
[0.0001671314239501953, 0.0001678466796875, 0.00016808509826660156]

正如您所看到的,python算法的执行时间比我自己的要一致得多。有人知道为什么吗?

代码:

代码语言:javascript
复制
import timeit
import random


def quick(lst):
    if not lst:
        return []
    else:
        first, rest = lst[0], lst[1:]
        great = []
        less = []
        for item in rest:
            great.append(item) if item >= first else less.append(item)
        return quick(less) + [first] + quick(great)

def sort(lst):
    lst.sort()
    return lst


x = [random.randint(1, 10000) for i in xrange(1, 1000)]

quick_t = timeit.Timer("'quick(x)'")

print quick_t.repeat(3, 2000)

sort_t = timeit.Timer("'sort(x)'")

print sort_t.repeat(3, 2000)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-10 23:41:20

你的时机在很多方面都是可怕的错误。首先,您的sort包装器仍然会修改它的输入,而不是返回一个新列表:

代码语言:javascript
复制
>>> x = [2, 1]
>>> sort(x)
[1, 2]
>>> x
[1, 2]

第二,这两种选择都不是你的时机。您正在计时字符串文本'quick(x)''sort(x)'的计算时间。没有真正的分类。

下面是您实际执行时间安排的方法:

代码语言:javascript
复制
>>> x = [random.randint(1, 10000) for i in xrange(1, 1000)]

>>> print timeit.repeat('quick(x)', 'from __main__ import quick, x', repeat=3, number=500)
[1.1500223235169074, 1.0714474915748724, 1.0657452245240506]
>>> print timeit.repeat('sorted(x)', 'from __main__ import quick, x', repeat=3, number=500)
[0.0944752552401269, 0.10085532031979483, 0.09799135718691332]
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39431517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档