zoukankan      html  css  js  c++  java
  • Python冒泡排序(6)

    前面写了5种冒泡排序,实质只有2种冒泡方式。

    第1种是采用相邻两数比较的方式进行排序,第2种是采用与固定位数字比较的方式进行排序。

    第1种方式中两个比较的数所处的位置每次都是不同的,第2种方式中两个比较的数所处的位置有一个是不变的。

    第1种方式中可以通过添加判断标识的方式减少排序轮次。

    例如如下代码中添加了bf标识

    Python代码:

    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    print("排序前: %s
    " %lst)
    
    #
    for i in range(int(len(lst)/2)):
        bf = False
        print("第%s轮" % (i+1))
        #
        for m in range(i,len(lst)-i-1):
            # 如果前大后小,则交换位置
            if lst[m] > lst[m+1]:
                lst[m],lst[m+1] = lst[m+1],lst[m]
                bf = True
                print("    右向冒泡第%s次 [%s]:%s,[%s]:%s比较 互换 %s" % (m-i+1,m,lst[m+1],m+1,lst[m],lst))
            else:
                print("    右向冒泡第%s次 [%s]:%s,[%s]:%s比较 不变 %s" % (m-i+1,m,lst[m],m+1,lst[m+1],lst))
        print("
    ")
    
        if not bf:
            break
    
        #
        for n in range(len(lst)-i-2,i,-1):
            # 如果前大后小,则交换位置
            if lst[n-1] > lst[n]:
                lst[n-1],lst[n] = lst[n],lst[n-1]
                bf = True
                print("    左向冒泡第%s次 [%s]:%s,[%s]:%s比较 互换 %s" % (9-n-i,n-1,lst[n],n,lst[n-1],lst))
            else:
                print("    左向冒泡第%s次 [%s]:%s,[%s]:%s比较 不变 %s" % (9-n-i,n-1,lst[n-1],n,lst[n],lst))
    
        if not bf:
            break
    
    print("
    排序后:  %s" % lst)

    输出结果:

    E:pythonalgorithm>python3 bubbleSort5.py
    排序前: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    
    第1轮
        右向冒泡第1次 [0]:1,[1]:2比较 不变 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
        右向冒泡第2次 [1]:2,[2]:3比较 不变 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
        右向冒泡第3次 [2]:3,[3]:4比较 不变 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
        右向冒泡第4次 [3]:4,[4]:5比较 不变 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
        右向冒泡第5次 [4]:5,[5]:6比较 不变 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
        右向冒泡第6次 [5]:6,[6]:7比较 不变 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
        右向冒泡第7次 [6]:7,[7]:8比较 不变 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
        右向冒泡第8次 [7]:8,[8]:9比较 不变 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
        右向冒泡第9次 [8]:9,[9]:0比较 互换 [1, 2, 3, 4, 5, 6, 7, 8, 0, 9]
    
    
        左向冒泡第1次 [7]:8,[8]:0比较 互换 [1, 2, 3, 4, 5, 6, 7, 0, 8, 9]
        左向冒泡第2次 [6]:7,[7]:0比较 互换 [1, 2, 3, 4, 5, 6, 0, 7, 8, 9]
        左向冒泡第3次 [5]:6,[6]:0比较 互换 [1, 2, 3, 4, 5, 0, 6, 7, 8, 9]
        左向冒泡第4次 [4]:5,[5]:0比较 互换 [1, 2, 3, 4, 0, 5, 6, 7, 8, 9]
        左向冒泡第5次 [3]:4,[4]:0比较 互换 [1, 2, 3, 0, 4, 5, 6, 7, 8, 9]
        左向冒泡第6次 [2]:3,[3]:0比较 互换 [1, 2, 0, 3, 4, 5, 6, 7, 8, 9]
        左向冒泡第7次 [1]:2,[2]:0比较 互换 [1, 0, 2, 3, 4, 5, 6, 7, 8, 9]
        左向冒泡第8次 [0]:1,[1]:0比较 互换 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    第2轮
        右向冒泡第1次 [1]:1,[2]:2比较 不变 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
        右向冒泡第2次 [2]:2,[3]:3比较 不变 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
        右向冒泡第3次 [3]:3,[4]:4比较 不变 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
        右向冒泡第4次 [4]:4,[5]:5比较 不变 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
        右向冒泡第5次 [5]:5,[6]:6比较 不变 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
        右向冒泡第6次 [6]:6,[7]:7比较 不变 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
        右向冒泡第7次 [7]:7,[8]:8比较 不变 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    
    
    排序后:  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    =====结束=====

  • 相关阅读:
    Makefile.am文件配置
    PHP之mb_check_encoding使用
    PHP之mb_internal_encoding使用
    MarkDown编辑使用指南
    test
    [MySQL]修改mysql的root密码
    开启IT之旅_真理不死,信念永恒
    Python pickle 模块
    python注意点
    GAT2.0使用文档(组合接口测试)
  • 原文地址:https://www.cnblogs.com/sam11/p/8350708.html
Copyright © 2011-2022 走看看