• 冒泡排序


    原理:比较两个相邻的元素,将值大的元素交换至右端。

    思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。

    循环和递归方式(要注意递归深度问题):

    import random
    import time
    import copy
    
    
    def mytime(func):
        def inner(*args, **kwargs):
            t1 = time.time()
            func(*args, **kwargs)
            t2 = time.time()
            print('time costed is {}.'.format(t2-t1))
        return inner
    
    @mytime
    def bubble_sort(li):
        print(li)
        for j in range(len(li)-1):
            for i in range(len(li)-j-1):
                if li[i] >= li[i+1]:
                    li[i], li[i+1] = li[i+1], li[i]
        print(li)
    
    
    @mytime
    def bubble_sort2(li):
        def core(subscript):
            for i in range(subscript):
                if li[i] >= li[i + 1]:
                    li[i], li[i + 1] = li[i + 1], li[i]
            subscript -= 1
            if subscript > 1:
                return core(subscript)
        length = len(li) - 1
        print(li)
        core(length)
        print(li)
    
    
    li = list(range(800))
    random.shuffle(li)
    nli = copy.deepcopy(li)
    bubble_sort(li)
    bubble_sort2(nli)
    

      

      

    冒泡排序优化:

    import random
    import time
    import copy
    
    
    def mytime(func):
        def inner(*args, **kwargs):
            t1 = time.time()
            func(*args, **kwargs)
            t2 = time.time()
            print('time costed is {}.'.format(t2-t1))
        return inner
    
    
    @mytime
    def bubble_sort3(li):
        print(li)
        for i in range(len(li) - 1):
            extr = 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]
                    extr = True
            if not extr:
                return
        print(li)
    
    li = list(range(800))
    random.shuffle(li)
    bubble_sort3(li)
    

      

      在某次对比之后,发现顺序没有改变,就证明已经排好序了。   其实快不了多少,因为上述情况发生的概率比较小

  • 相关阅读:
    使用VB获得系统目录路径
    自动点击页面中的JavaScript链接
    vb 随机数
    进程监控程序 监视进程的创建
    UTF8 Encoding rules
    How to create and apply patch by GIT
    Java Access Bridge Why IsJavaWindow always returns false?
    TomatoUSB 挂载了/jffs/opt之后登录出现$提示符以及VI内存耗尽等各种异常
    MMU解释 MMU启用后,CPU的内存访问请求会被MMU截获
    如何调整Linux内核启动中的驱动初始化顺序
  • 原文地址:https://www.cnblogs.com/wumingxiaoyao/p/8422491.html
Copyright © 2020-2023  润新知