zoukankan      html  css  js  c++  java
  • 冒泡排序

    冒泡排序

    排序思路:

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

    时间复杂度为:

      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
  • 相关阅读:
    华为摄像机sdc开发_02_华为摄像机到手后的一些问题
    华为摄像机sdc开发_01_基础开发环境搭建
    LNMP环境搭建及服务器加固
    常用数据库端口号
    Linux文件查找
    SpringBoot使用jackson
    Vue.js源码解析-Vue初始化流程之动态创建DOM
    Vue.js源码解析-Vue初始化流程
    Vue.js源码解析-从scripts脚本看vue构建
    Linux系统编程-文件IO
  • 原文地址:https://www.cnblogs.com/yxy-linux/p/6520609.html
Copyright © 2011-2022 走看看