当前位置: 首页 > article >正文

每日一练:冒泡排序

在这里插入图片描述

1. 概述

  冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
  冒泡排序过程:

  1. 从第一个元素开始,依次比较相邻的两个元素。
  2. 如果顺序不对(升序时前面的元素比后面的元素大,降序时前面的元素比后面的元素小),则交换它们的位置。
  3. 继续向后比较和交换,直到最后一个元素。
  4. 一次遍历完成后,最大(或最小)的元素就会被移动到最后一个位置。
  5. 重复以上步骤,每次遍历都将未排序序列中的最大(或最小)元素移动到正确的位置。
  6. 重复这个过程,直到整个序列有序。

  如下图所示:

在这里插入图片描述

2. 代码实现

  下面三个示例展示了冒泡排序在不同情况下的应用。冒泡排序的时间复杂度为O(n^2),在实际应用中,对大型数据集的排序不够高效,但它是一种容易理解和实现的排序算法。

2.1 升序排序

def bubble_sort(arr):
    n = len(arr)
    
    for i in range(n):
        # 最后i个元素已经排好序,无需再比较
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                # 交换元素
                arr[j], arr[j+1] = arr[j+1], arr[j]

# 示例
arr1 = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr1)
print("升序排序结果:", arr1)

在这里插入图片描述

2.2 降序排序

def bubble_sort_desc(arr):
    n = len(arr)
    
    for i in range(n):
        # 最后i个元素已经排好序,无需再比较
        for j in range(0, n-i-1):
            if arr[j] < arr[j+1]:
                # 交换元素
                arr[j], arr[j+1] = arr[j+1], arr[j]

# 示例
arr2 = [64, 34, 25, 12, 22, 11, 90]
bubble_sort_desc(arr2)
print("降序排序结果:", arr2)

在这里插入图片描述

2.3 字符串排序

def bubble_sort_str(arr):
    n = len(arr)
    
    for i in range(n):
        # 最后i个元素已经排好序,无需再比较
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                # 交换元素
                arr[j], arr[j+1] = arr[j+1], arr[j]

# 示例
arr3 = ["apple", "banana", "orange", "grape", "kiwi"]
bubble_sort_str(arr3)
print("字符串列表排序结果:", arr3)

在这里插入图片描述

3. 参考

https://www.runoob.com/python3/python-bubble-sort.html

在这里插入图片描述


http://www.kler.cn/a/154428.html

相关文章:

  • Linux下多线程
  • 问:说说SpringDAO及ORM的用法?
  • 前端埋点、监控
  • LeetCode题解:17.电话号码的数字组合【Python题解超详细,回溯法、多叉树】,知识拓展:深度优先搜索与广度优先搜索
  • ADS项目笔记 1. 低噪声放大器LNA天线一体化设计
  • java 数组 拼接 详解
  • 7、Jenkins+Nexus3+Docker+K8s实现CICD
  • 最小生成树算法
  • C++的一些基础
  • 光伏测算工具能测量哪些数据?
  • 自己开发组件更新到npm网站上 通过npm install 安装 保姆级别教程
  • Swin Transformer实战图像分类(Windows下,无需用到Conda,亲测有效)
  • 时序预测 | Python实现TCN时间卷积神经网络时间序列预测(多图,多指标)
  • C语言-指针_02
  • 【FMC139】青翼科技基于VITA57.1标准的4路500MSPS/1GSPS/1.25GSPS采样率14位AD采集FMC子卡模块
  • [ 蓝桥杯Web真题 ]-年度明星项目
  • Linux下的文件IO之系统IO
  • 2023.11.28-电商平台建设03 - 大数据调优手段
  • install pnpm : 无法加载文件的解决办法
  • 【智能家居】一、工厂模式实现继电器灯控制
  • 【ShardingSphere专题】SpringBoot整合ShardingSphere(一、数据分片入门及实验)
  • jquery 判断是手机端还是电脑端
  • 独家揭秘:卢松松拍摄视频背后的创作过程
  • 使用系统ProgressBar实现三色进度条
  • 【开源视频联动物联网平台】JAIN-SIP库写一个SIP服务器
  • 面试就是这么简单,offer拿到手软(一)—— 常见非技术问题回答思路