• 算法之冒泡算法及冒泡算法改进点 做梦的人


     

    1.冒泡算法的原理(搬运百度百科)

    比较相邻的元素。如果第一个比第二个大,就交换他们两个。
    对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
    针对所有的元素重复以上的步骤,除了最后一个。
    持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

    冒泡代码

    
    
    def bubbling_sort(array):
    for i in range(len(array)-1):
    for j in range(len(array) - i-1):
    if array[j] > array[j + 1]:
    array[j], array[j + 1] = array[j + 1], array[j]
    return array
    
    
    if __name__ == '__main__':
    array = [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
      print(array)
      bubbling_sort(array)
      print(array)

    排序的过程如下:第一行是原始数据,方便查看

     

     以第一次排序顺序举例:

    10比17小,10位置不变-----》17比50 小,17位置不变----》 50 比7大,7与50交换位置----》    50比30大,30与50交换位置-----》 50比24大,50与24交换位置 ---》50比27大,50与27交换位置----》50比45大,50与45交换位置----》50比15大,50与15交换位置---》50比5大,50与5交换位置----》50比36大,50与36交换位置----》50比21大,50与21交换位置, 第一次排序把最大的数给找出来了

     其他逻辑也是如此

     2.冒泡优化点

    可能也有一些列表是有序的,那其实就没有必要做一些排序。

    如这样的列表,array=[9, 8, 7, 1, 2, 3, 4, 5],见下图排序列表顺序

     按照以前代码那么排序是要经历8次排序,也就是列表的长度次数,那这里其实可以对冒泡建立一个标志位,如果发现是一个有序的,就不用进行排序,如下代码

    def bubbling_sort_excange(array):
    for i in range(1, len(array)):
    exchange=False
    for j in range(0, len(array) - i):
    if array[j] > array[j + 1]:
    array[j], array[j + 1] = array[j + 1], array[j]
    exchange=True
    print(array)
    if not exchange:
    return
    return array
    if __name__ == '__main__':
      array=[9, 8, 7, 1, 2, 3, 4, 5]
      bubbling_sort_excange(array)
      print(array

    在来看看它的执行次数,只做了5次的排序

  • 相关阅读:
    SQL SERVER备份数据库存储过程.
    JMail组件使用中文文档
    Oracle,SQL Server,Access万能数据库通用类!
    快速幂的理解及使用
    关于地图坐标问题转换
    ref和依赖注入
    Unity3D 中的程序后台运行
    Unity中创建双面材质
    Unity3d 移动平台中文显示问题
    Unity3D 4.0中使用传统动画
  • 原文地址:https://www.cnblogs.com/chongyou/p/16030907.html
Copyright © 2020-2023  润新知