算法学习笔记二一冒泡排序

什么是冒泡排序

​对给定数组进行遍历,每次比较相邻两个元素大小,若大的数值在前面则交换两数位置(升序),每完成一趟遍历数组中最大的元素都会上升到数组的末尾,这也是冒泡一词的由来。

算法原理

  1. (升序)列表每相邻的数,如果前面比后面大,则交换这两个数。
  2. 一趟排序完成后,无序区减少一个数,有序区增加一个数。
  3. 再对前面n-1个数值进行相同的遍历,一共完成n-1次遍历就实现了排序完成

代码示例

def bubble_sort(list):
   for i in range(len(list) - 1):  # 第i趟
       for j in range(len(list) - i - 1):
           if list[j + 1] < list[j]: # 升序
               # temp = list[j + 1]
               # list[j + 1] = list[j]
               # list[j] = temp
               list[j], list[j + 1] = list[j + 1], list[j] # python中交换元素写法
       print(list) # 查看每趟比较的结果
   return list

运行上述代码可以发现,若一个数组在规定的i趟排序完成前就以及排好序,为提高运行效率,则不需要进行后面的排序。
此时定义一个布尔变量,定义每趟是否进行了交换操作,若没有交换操作发生,则说明数组提前到达了有序状态。

def bubble_sort(list):
    for i in range(len(list) - 1):  # 第i趟
        exchange = False # 默认没有交换发生
        for j in range(len(list) - i - 1):
            if list[j + 1] < list[j]:
                list[j], list[j + 1] = list[j + 1], list[j]
                exchange = True # 交换操作发生
        if not exchange: # 若每趟排序后没有交换,结束循环
            return li
        print(list)
    return list
posted @   Monster_bird  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示