参考:www.bilibili.com/video/BV1E4…
实现
import datetime
import random
from functools import wraps
tempList = [random.randint(0, 100000) for x in range(50000)]
def logger(function):
@wraps(function)
def wrapper(*args, **kwargs):
start = datetime.datetime.now().timestamp()
result = function(*args, **kwargs)
end = datetime.datetime.now().timestamp()
print(f"总共花了{int(end - start)}s")
return result
return wrapper
@logger
def shellSort(l):
"""
交换法
:param l:
:return:
"""
gap = len(l) // 2
while gap != 0:
for i in range(gap, len(l)):
for j in range(i - gap, -1, -gap):
if l[j] > l[j + gap]:
l[j], l[j + gap] = l[j + gap], l[j]
gap //= 2
return l
@logger
def shellSort2(l):
"""
位移法
:param l:
:return:
"""
gap = len(l) // 2
while gap != 0:
for i in range(gap, len(l)):
j = i
temp = l[i]
if l[j] < l[j - gap]:
while j - gap >= 0 and temp < l[j - gap]:
l[j] = l[j - gap]
j -= gap
l[j] = temp
gap //= 2
return l
shellSort2(tempList)