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

冒泡排序是原址排序,时间复杂度在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
相关推荐
小胖xiaopangss18 分钟前
栈的压入弹出序列--牛客
数据结构·c++·算法
_给我学起来19 分钟前
前缀和数组
算法
程序员莫小特21 分钟前
老题新解|求三角形面积
开发语言·数据结构·c++·算法·信息学奥赛一本通
mc235622 分钟前
C语言指针详解
c语言·开发语言·算法
Asmalin30 分钟前
【代码随想录day 30】 力扣 763. 划分字母区间
算法·leetcode·职场和发展
小欣加油35 分钟前
leetcode 526 优美的排列
c++·算法·leetcode·职场和发展·深度优先·剪枝
代码充电宝1 小时前
LeetCode 算法题【简单】49. 字母异位词分组
java·算法·leetcode·面试·哈希算法
懒羊羊不懒@1 小时前
数据结构绪论
数据结构
搂鱼1145142 小时前
(二分、思维)洛谷 P4090 USACO17DEC Greedy Gift Takers P 题解
算法
YSRM2 小时前
Leetcode+Java+图论+岛屿问题
java·算法·leetcode·图论