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

冒泡排序是原址排序,时间复杂度在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
相关推荐
好奇龙猫11 分钟前
【大学院-筆記試験練習:线性代数和数据结构(16)】
数据结构·线性代数·决策树
永远都不秃头的程序员(互关)12 分钟前
【决策树深度探索(五)】智慧之眼:信息增益,如何找到最佳决策问题?
算法·决策树·机器学习
智者知已应修善业15 分钟前
【输出方形点阵】2024-11-1
c语言·c++·经验分享·笔记·算法
hope_wisdom17 分钟前
C/C++数据结构之用数组实现队列
c语言·数据结构·c++·队列
近津薪荼21 分钟前
优选算法——双指针专题2(模拟)
c++·学习·算法
乌萨奇也要立志学C++27 分钟前
【洛谷】DFS 新手必学的4 道DFS经典题 手把手教你剪枝与回溯
算法·深度优先
sali-tec27 分钟前
C# 基于OpenCv的视觉工作流-章15-多边形逼近
图像处理·人工智能·opencv·算法·计算机视觉
一条大祥脚29 分钟前
势能分析与势能线段树
开发语言·javascript·数据结构·算法
想做一只开心的菜鸡33 分钟前
DARTS#01 | Tournament Sort算法 | MySQL深度翻页优化技巧 | 论文ByteSlice Review
数据库·mysql·算法
一起养小猫34 分钟前
Flutter实战:从零实现俄罗斯方块(一)数据结构与核心算法
数据结构·算法·flutter