冒泡排序貌似算是最出名的排序算法之一了,但是我感觉它的实现其实并不是正常人第一时间能想到的。反正就我来说,我能第一时间想到的排序算法长这样:
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[:])
结果:
running [py.py] ...
normal: 1.0199034214019775 secs
bubble: 1.4529473781585693 secs
Press ENTER or type command to continue
数据量再大点更明显,noraml
就没有比 bubble
慢过。一个更容易想到的而且比冒泡更快的算法难道不配拥有一个名字么。。。