zoukankan      html  css  js  c++  java
  • 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
    当你的才华撑不起你的野心时,你需要静下心来学习。
  • 相关阅读:
    iOS_绘制带删除线的Label
    SSH深度历险(一)深入浅出Hibernate架构(一)-------映射解析——七种映射关系
    Android FoldingLayout 折叠布局 原理及实现(一)
    [JavaSecurity]
    AWR--service statistics
    VC驿站黑客编程(关机,重新启动,注销)
    每天进步一点点——Linux中的文件描写叙述符与打开文件之间的关系
    Cocos2d-X中的粒子
    cocos2dx3.0 对象池
    hdu 5317 RGCDQ
  • 原文地址:https://www.cnblogs.com/z977690557/p/15530293.html
Copyright © 2011-2022 走看看