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

    打印后的效果为

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

  • 相关阅读:
    DataAnnotations
    使用BizTalk实现RosettaNet B2B So Easy
    biztalk rosettanet 自定义 pip code
    Debatching(Splitting) XML Message in Orchestration using DefaultPipeline
    Modifying namespace in XML document programmatically
    IIS各个版本中你需要知道的那些事儿
    关于IHttpModule的相关知识总结
    开发设计的一些思想总结
    《ASP.NET SignalR系列》第五课 在MVC中使用SignalR
    《ASP.NET SignalR系列》第四课 SignalR自托管(不用IIS)
  • 原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/9209722.html
Copyright © 2011-2022 走看看