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