zoukankan      html  css  js  c++  java
  • 冒泡法

    冒泡法

    标签(空格分隔): python-排序算法


    冒泡法介绍

    • 三大基础排序算法之一
    • 冒泡法
      • 属于交换排序
      • 两两比较大小, 交换位置。
      • 结果分为升序和降序排序
    • 时间复杂度
      • n * (n - i - 1) = n**2

    代码实现

    lst = [5, 6, 7, 8, 9, 10, 11, 12, 15, 14]   # 待排序列表
    length = len(lst)    # 长度
    count = 0   # 计数统计
    
    for i in range(length):
        Flag = True
        for j in range(length - i - 1):
            if lst[j] > lst[j+1]:
                Flag = False    # 如果在一轮比较中,没有发生交换则表示排序已经完成
                count += 1  # 统计效率
                lst[j], lst[j+1] = lst[j+1], lst[j]
        if Flag:    # 使用标记来控制提速
            break
    
    print(lst)
    print(count)
    
    
    • [x] 唯一的优化思路:
    • 通过加标记 Flag,如果在一轮比较中,没有发生交换则表示排序已经完成, 可以直接退出排序了

    冒泡法总结

    • 冒泡法需要数据一轮轮比较
    • 可以设定一个标记判断此轮是否有数据发生交换,如果没有发生交换,可以结束排序,如果发生交换,则继续下一轮排序
    • 最差的排序情况: 初始顺序与目标顺序完全相反,则遍历次数为: n * (n-1)/2
    • 最好的排序情况: 初始顺序与目标顺序完全相同,则遍历次数为: n-1 次
    • 时间复杂度: O(n**2)
    • 空间复杂度: O(1) ---> 只使用了一个中间变量
  • 相关阅读:
    Springboot使用PlatformTransactionManager接口的事务处理
    js 正则替换html标签
    【转】mysql查询时,查询结果按where in数组排序
    js输出字幕数字a-zA-Z0-9
    tcpdump使用教程
    rsync安装使用教程
    vim配置修改教程
    XD刷机报错bad CRC
    使用docker搭建seafile服务器
    案例:使用sqlplus登录报ORA-12547错误
  • 原文地址:https://www.cnblogs.com/jingru-QAQ/p/11405519.html
Copyright © 2011-2022 走看看