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
    当你的才华撑不起你的野心时,你需要静下心来学习。
  • 相关阅读:
    关于如何实现接口IComparer以实现自己需要的排序规则
    随机移动
    关于资源版本管理的问题
    Unity3D内部脚本编程入门
    删除GameObject上除了Quality子物体之外其他子物体的组件(但不删除transform)
    资料
    c# 基础知识点
    c# 匿名方法(委托)
    git
    一篇关于Unity3D优化的文章,翻译脚本优化部分
  • 原文地址:https://www.cnblogs.com/z977690557/p/15530293.html
Copyright © 2011-2022 走看看