2つのバージョン(スニペットまたはラムダを使用した通常のコード)のコードに対してtimeit.timeitを使用してソートの時間を測定しようとしています:
bubble='''
elements = [1,22,4,632,12,3432,54531,2,2,2,2,2,4,54,3,2,1,54,43,11,22,32]
def bubble_sort(elements):
n=0
for i in range(len(elements)-n):
for j in range(len(elements)-1):
if elements[j]>elements[j+1]:
elements[j+1],elements[j] = elements[j], elements[j+1]
n+=1
return elements
'''
そして通常:
elements = [1,22,4,632,12,3432,54531,2,2,2,2,2,4,54,3,2,1,54,43,11,22,32]
def bubble_sort(elements):
n=0
for i in range(len(elements)-n):
for j in range(len(elements)-1):
if elements[j]>elements[j+1]:
elements[j+1],elements[j] = elements[j], elements[j+1]
n+=1
return elements
実行timeit.timeit(stmt=bubble, number=1000)
すると0.00026829999978872365の結果が得られますが、使用すると
t = Timer(lambda: bubble_sort(elements))
print(t.timeit(number = 1000))
それははるかに遅い0.04926030000024184を与えます。誰かが私に理由を説明できますか?
@Craigの鋭敏な観察を確認するために、スニペットバージョン内で関数を実際に呼び出すと、それらがほぼ同じ速度であることが確認されます。
import timeit
bubble='''
def bubble_sort(elements):
n=0
for i in range(len(elements)-n):
for j in range(len(elements)-1):
if elements[j]>elements[j+1]:
elements[j+1],elements[j] = elements[j], elements[j+1]
n+=1
return elements
bubble_sort([1,22,4,632,12,3432,54531,2,2,2,2,2,4,54,3,2,1,54,43,11,22,32])
'''
def bubble_sort(elements):
n=0
for i in range(len(elements)-n):
for j in range(len(elements)-1):
if elements[j]>elements[j+1]:
elements[j+1],elements[j] = elements[j], elements[j+1]
n+=1
return elements
print(timeit.timeit(stmt=bubble, number=10000))
print(timeit.timeit(stmt=lambda: bubble_sort([1,22,4,632,12,3432,54531,2,2,2,2,2,4,54,3,2,1,54,43,11,22,32]), number=10000))
print(timeit.timeit(stmt=lambda: list(sorted([1,22,4,632,12,3432,54531,2,2,2,2,2,4,54,3,2,1,54,43,11,22,32])), number=10000))
そしてもちろん、練習を除いて、独自のバブルソートを実行するべきではありません。
0.569853096
0.5863851120000001
0.00920665399999998
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加