我觉得这个大概是最容易想到的排序算法了吧(比冒泡更容易想到吧?)
def normal(a):
for i in range(len(a)):
for j in range(i, len(a)):
if a[i] > a[j]:
a[i], a[j] = a[j], a[i]
但是这个算法有名字么... 而且我试了下, 这个算法比冒泡更快:
def timer(func):
import functools
@functools.wraps(func)
def wrapper(*args, **kwargs):
import time
t1 = time.time()
func(*args, **kwargs)
t2 = time.time()
print(f"{func.__name__}: {t2 - t1} secs")
return wrapper
@timer
def bubble(a):
for i in range(len(a)):
for j in range(len(a) - i - 1):
if a[j] > a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j]
@timer
def normal(a):
for i in range(len(a)):
for j in range(i, len(a)):
if a[i] > a[j]:
a[i], a[j] = a[j], a[i]
import random
a = [random.randint(0, 100000) for x in range(2000)]
normal(a[:])
bubble(a[:])
结果(试了很多次了, 数据量大更明显, normal 就没有比 bubble 更慢过):
running [py.py] ...
normal: 1.0199034214019775 secs
bubble: 1.4529473781585693 secs
Press ENTER or type command to continue
所以各位, 这个算法有名字么... 为什么这个算法既容易想到, 又比冒泡快, 却没有冒泡出名呢...
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.