zoukankan      html  css  js  c++  java
  • LOW逼三人组(一)----冒泡算法

    排序

     1、冒泡排序

    冒泡算法

    import random         # 随机模块
    def bubble_sort(li):  ###################################冒泡排序#####################################
        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(1000))   # 1000个数
    random.shuffle(data)     # 打乱这个序列
    bubble_sort(data)        # 将打乱后的序列传送到冒泡算法函数
    print(data)              # 打印排序后的序列

    打印后的效果为:

    ``````````````````````

     改进后的冒泡算法:

    import random
    def bubble_sort_1(li):        # 上个算法的改进,用于极端情况,例如已经拍好的序列
        for i in range(len(li)-1):
            exchange=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]
                    exchange=True
            if not exchange:     # 如果没有交换就直接退出
                break
    data=list(range(1000))
    random.shuffle(data)
    bubble_sort_1(data)
    print(data)

    改进前和改进后的冒泡算法进行对比:

    import random         # 随机模块
    import time
    
    def cal_time(func):            # 装饰器 ,用来检测算法所执行的时间
        def wrapper(*args,**kwargs):
            t1=time.time()
            result=func(*args,**kwargs)
            t2=time.time()
            print("%s running time: %s secs." %(func.__name__,t2-t1))
            return result
        return wrapper
    
    @cal_time
    def bubble_sort(li):  ###################################冒泡排序#####################################
        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(1000))   # 1000个数
    # random.shuffle(data)     # 打乱这个序列
    # bubble_sort(data)        # 将打乱后的序列传送到冒泡算法函数
    # print(data)              # 打印排序后的序列
    
    @cal_time
    def bubble_sort_1(li):        # 上个算法的改进,用于极端情况,例如已经拍好的序列
        for i in range(len(li)-1):
            exchange=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]
                    exchange=True
            if not exchange:
                break
    data=list(range(1000))
    random.shuffle(data)
    bubble_sort(data)
    bubble_sort_1(data)
    print(data)
    View Code

    打印后的效果为

    ``````````````````````

  • 相关阅读:
    【机器学习】:梯度提升决策树(GBDT)
    【推荐系统】:LFM算法解析
    【SQL】:内连接,自然连接
    【SQL】:保留小数点后几位(除法)
    Ubuntu 18.04:磁盘读取性能不佳
    skynet超时机制实现
    关于 Spring Boot 中创建对象的疑虑 → @Bean 与 @Component 同时作用同一个类,会怎么样?
    记录不存在则插入,存在则更新 → MySQL 的实现方式有哪些?
    记一次线上问题 → 对 MySQL 的 ON UPDATE CURRENT_TIMESTAMP 的片面认知
    WebSocket
  • 原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/9209722.html
Copyright © 2011-2022 走看看