这个算什么排序算法啊?
資深大佬 : zhanglintc 9
我觉得这个大概是最容易想到的排序算法了吧(比冒泡更容易想到吧?)
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
所以各位, 这个算法有名字么… 为什么这个算法既容易想到, 又比冒泡快, 却没有冒泡出名呢…
大佬有話說 (13)