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

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

    思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第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)
    

      

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

  • 相关阅读:
    silverlight的TranslateTransform 的使用
    720 JavaScript函数的this指向
    JavaScript数组
    JavaScriptDOM事件
    JavaScript流程控制语句
    CSS布局案例
    JavaScriptDOM基础
    JavaScriptDOM事件
    JavaScript基础语法
    JavaScript的String对象相关方法
  • 原文地址:https://www.cnblogs.com/wumingxiaoyao/p/8422491.html
Copyright © 2011-2022 走看看