排序算法(一):冒泡排序

冒泡排序是原址排序,时间复杂度在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
相关推荐
大闲在人5 分钟前
7. 供应链与制造过程术语:“周期时间”
算法·供应链管理·智能制造·工业工程
小熳芋8 分钟前
443. 压缩字符串-python-双指针
算法
Charlie_lll18 分钟前
力扣解题-移动零
后端·算法·leetcode
chaser&upper18 分钟前
矩阵革命:在 AtomGit 解码 CANN ops-nn 如何构建 AIGC 的“线性基石”
程序人生·算法
weixin_4997715527 分钟前
C++中的组合模式
开发语言·c++·算法
iAkuya1 小时前
(leetcode)力扣100 62N皇后问题 (普通回溯(使用set存储),位运算回溯)
算法·leetcode·职场和发展
近津薪荼1 小时前
dfs专题5——(二叉搜索树中第 K 小的元素)
c++·学习·算法·深度优先
xiaoye-duck1 小时前
吃透 C++ STL list:从基础使用到特性对比,解锁链表容器高效用法
c++·算法·stl
松☆1 小时前
CANN与大模型推理:在边缘端高效运行7B参数语言模型的实践指南
人工智能·算法·语言模型
java干货1 小时前
为什么 “File 10“ 排在 “File 2“ 前面?解决文件名排序的终极算法:自然排序
开发语言·python·算法