冒泡排序

Posted 终点即起点

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序相关的知识,希望对你有一定的参考价值。

冒泡排序

排序思路:

  将列表每两个相邻的数对比,如果前边的比后边的大,那么交换这两个数直到将最大的数放至最右侧。

时间复杂度为:

  O(n2)

import random
import time

def cal_time(func):
    """
    测试时间装饰器
    :param func: 接收一个函数
    :return:
    """
    def wrapper(*args, **kwargs):
        ti = time.time()
        x = func(*args, **kwargs)
        ti2 = time.time()
        print("time cost:", func.__name__, ti2 - ti)
        return x
    return wrapper

@cal_time
def bubble_sort(li):
    """
    冒泡排序
    :param li: 列表
    :return:
    """
    for i in range(len(li) - 1):
        for j in range(len(li) - i - 1):
            if li[j] > li[j + 1]:
                li[j], li[j+1] = li[j+1], li[j]


data = list(range(999, 1500))
# 将顺序打乱
random.shuffle(data)
print(data)
# [944, 664, 701, 110, 482, 968, 108, 465, 246, 902, 216, 171, 361, 734, 242, 138, 914, 620, 923, 393,]
bubble_sort(data)
print(data)
-------------------------------------执行结果---------------------------------------
# time cost: bubble_sort 0.04400277137756348
# [999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015,]

 冒泡排序之优化

  优化说明:如果冒泡排序中执行一趟而没有交换,则列表已经是有序状态,可以直接结束算法。

@cal_time
def bubble_sort_1(li):
    """
    冒泡排序之优化
    :param li: 列表
    :return:None
    """
    for i in range(len(li) - 1):
        change = False
        for j in range(len(li) - i - 1):
            if li[j] > li[j + 1]:
                li[j], li[j+1] = li[j+1], li[j]
                change = True
            if not change:
                break

data = list(range(10000))
random.shuffle(data)
bubble_sort_1(data)
bubble_sort(data)

-------------------------------执行结果时间差-----------------------
time cost: bubble_sort_1 0.011000633239746094
time cost: bubble_sort 19.759130239486694

 

以上是关于冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

java冒泡排序法代码

python代码实现鸡尾酒排序(双向冒泡排序)

冒泡排序python代码

视频+图文+动画详解冒泡排序

交换排序(冒泡排序快速排序的算法思想及代码实现)

C语言冒泡排序。