冒泡排序是原址排序,时间复杂度在n~n^2之间。最好的情况是数组本身就是序,并且是满足排序需求的,这时只要n次循环就可以。最坏的情况的,数组本身的顺序和需要的顺序是相反的。
冒泡排序的思路是:两两对比,交换位置,第一次循环把最大的或者是最小的那个放在最后,经过n次循环,把数字放在对应的位置上。
代码实现:
python
import time
from functools import wraps
def count_execute_time(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
print(f"{func.__name__} cost {time.time() - start}")
print(f"{func.__name__} result: {result}\n")
return result
return wrapper
@count_execute_time
def maopao_asc_sort(data):
"""
冒泡生序排序
"""
count_ = 0
for i in range(len(data)):
for j in range(len(data)-1):
if data[j] > data[j+1]:
data[j], data[j+1] = data[j+1], data[j]
count_ += 1
return data, count_
@count_execute_time
def maopao_desc_sort(data):
"""
冒泡降序
"""
count = 0
for i in range(len(data)):
for j in range(len(data)-1):
if data[j] < data[j+1]:
data[j], data[j+1] = data[j+1], data[j]
count += 1
return data, count