• Python 冒泡排序的优化


    工作不重,看下算法书:小灰的算法之旅,挺不错的,有基础的可以看看,小瑕疵就是代码是用c++ 写的,有时候看起来怪怪。

    优化一、

    在提前N次就排好顺序后,在N+1轮排序结束后跳出大循环,结束排序

    尴尬:有可能跳出循环的那一轮,与正常结束循环数一样

     1 def sort(array):
     2     for i in range(len(array)-1):
     3         isNotchange=True
     4         for j in range(len(array)-i-1):
     5             print(array[j], j)
     6             if array[j] > array[j+1]:
     7                 array[j],array[j+1] = array[j+1],array[j]
     8                 isNotchange=False
     9         if isNotchange==True:
    10             break

    优化二、

    在第N次排顺完成后,后半段数字已完成排序,则从N+1轮排序开始,后半段数字不用参与排序

     1 def maoPao(array):
     2     unorderedBorder = len(array) - 1
     3     lastExchangeNumberIndex=0
     4     for i in range(len(array)-1):
     5         isExchangeNumber = True
     6         for j in range( unorderedBorder):
     7             if array[j] > array[j+1]:
     8                 print(array[j],j)
     9                 array[j],array[j+1] = array[j+1],array[j]
    10                 lastExchangeNuberIndex=j
    11                 isChangeNumber=False
    12         print("第 {0} 轮输出结果 : {1}".format(i + 1, array))
    13         unorderedBorder=lastExchangeNumberIndex
    14         if isExchangeNumber==True:
    15             break

    优化三、

    例子:b=[2,3,4,4,5,7,8,1]

     1 def cocktailSort(array):
     2     for i in range(int(len(array)/2)):
     3         isNotchange = True
     4         if i % 2 == 0 :
     5             for j in range(len(array) - i - 1):
     6                 if array[j] > array[j + 1]:
     7                     array[j], array[j + 1] = array[j + 1], array[j]
     8                 isNotchange = False
     9             print("左到右,第 {0} 轮输出结果 : {1}".format(i + 1, array))
    10             print(" ")
    11             if isNotchange == True:
    12                 break
    13         else:
    14             print("右到左,第 i 轮循环: ", i)
    15             for j in range(len(array)-1,-1+i,-1):
    16                 if array[j] < array[j-1]:
    17                     print("j de zhi", j)
    18                     array[j], array[j - 1] = array[j - 1], array[j]
    19                     isNotchange = False
    20             print("右到左,第 {0} 轮输出结果 : {1}".format(i + 1, array))
    21             print(" ")
    22             if isNotchange == True:
    23                 break
    当你的才华撑不起你的野心时,你需要静下心来学习。
  • 相关阅读:
    11个Linux基础面试问题
    OSI模型
    戴文的Linux内核专题:10配置内核(6)
    面向对象实验四(输入输出流)
    计算机程序的思维逻辑 (2)
    计算机程序的思维逻辑 (1)
    java基础3.0:Java常用API
    java基础2.0:Object、Class、克隆、异常编程
    java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final
    Ajax工作原理(转)
  • 原文地址:https://www.cnblogs.com/z977690557/p/15530293.html
Copyright © 2020-2023  润新知