【算法】超快理解冒泡排序(含c#、c++、java、python代码)

冒泡排序概述

冒泡排序是一种简单的排序算法,它通过重复地遍历要排序的列表,一次比较两个元素并交换它们的位置,如果它们的顺序不正确。这个过程会不断重复,直到列表中的所有元素都被排序完成。

用小学的思维来看,可以将冒泡排序比喻成“水泡在水中上升”的过程。在排序的过程中,大的数字像沉重的石头一样会慢慢沉底,而小的数字就像气泡一样,会逐渐“冒”到顶部。

小学思维理解冒泡排序

假设有一群小朋友在按身高排队,他们站成一排,老师要他们从矮到高排列。老师每次会从第一个小朋友开始检查,如果发现前面的比后面的高,就让他们交换位置。这个过程像是“泡泡”在水里冒上来一样,比较小的“泡泡”(数字)会慢慢浮上来。

具体步骤如下:

  1. 老师从第一个小朋友开始检查,比较第一个和第二个,如果第一个比第二个高,他们就交换位置。
  2. 然后再比较第二个和第三个,以此类推。
  3. 这样一轮下来,最高的小朋友会被移动到队伍的最后一个位置。
  4. 接着再重复这个过程,从头开始比较,忽略已经排好位置的最高小朋友。
  5. 重复上面的步骤,直到所有小朋友都排好位置为止。

冒泡排序的工作原理

  1. 依次比较相邻的元素。
  2. 如果第一个元素比第二个元素大,就交换它们的位置。
  3. 这一趟排序下来,最大的元素会被移动到最后。
  4. 对剩下的元素重复以上过程,直到没有需要交换的元素为止。

冒泡排序算法的代码实现

下面分别展示冒泡排序的实现代码,包括 C#、C++、Java 和 Python。

C#

using System;class BubbleSortExample
{static void BubbleSort(int[] array){int n = array.Length;for (int i = 0; i < n - 1; i++){for (int j = 0; j < n - i - 1; j++){if (array[j] > array[j + 1]){// 交换位置int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}}static void Main(){int[] numbers = { 64, 34, 25, 12, 22, 11, 90 };Console.WriteLine("排序前: " + string.Join(", ", numbers));BubbleSort(numbers);Console.WriteLine("排序后: " + string.Join(", ", numbers));}
}

 C++

#include <iostream>
using namespace std;void bubbleSort(int arr[], int n)
{for (int i = 0; i < n - 1; i++){for (int j = 0; j < n - i - 1; j++){if (arr[j] > arr[j + 1]){// 交换位置int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}int main()
{int arr[] = {64, 34, 25, 12, 22, 11, 90};int n = sizeof(arr) / sizeof(arr[0]);cout << "排序前: ";for (int i = 0; i < n; i++)cout << arr[i] << " ";cout << endl;bubbleSort(arr, n);cout << "排序后: ";for (int i = 0; i < n; i++)cout << arr[i] << " ";cout << endl;return 0;
}

JAVA

public class BubbleSortExample {static void bubbleSort(int[] array) {int n = array.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (array[j] > array[j + 1]) {// 交换位置int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}}public static void main(String[] args) {int[] numbers = {64, 34, 25, 12, 22, 11, 90};System.out.println("排序前: ");for (int number : numbers) {System.out.print(number + " ");}bubbleSort(numbers);System.out.println("\n排序后: ");for (int number : numbers) {System.out.print(number + " ");}}
}

Python

def bubble_sort(arr):n = len(arr)for i in range(n - 1):for j in range(n - i - 1):if arr[j] > arr[j + 1]:# 交换位置arr[j], arr[j + 1] = arr[j + 1], arr[j]numbers = [64, 34, 25, 12, 22, 11, 90]
print("排序前:", numbers)
bubble_sort(numbers)
print("排序后:", numbers)

所有语言中的逻辑大致相同,都是通过两个嵌套的循环来实现排序:

  1. 外层循环:控制需要遍历的轮数。每进行一轮排序,最大的数字就会移动到最后,因此只需进行 n-1 轮(n 是数组长度)。
  2. 内层循环:比较相邻的两个元素并进行交换。每一轮内层循环都会将最大的元素“冒泡”到末尾。

冒泡排序的特点

  • 优点:简单易懂,适合小规模数据的排序。
  • 缺点:效率低下,特别是在数据量大的情况下,时间复杂度为 O(n^2)O(n2)。
  • 适用场景:适合对小型数据集合进行排序和学习基础算法时使用。

总结

冒泡排序虽然不是效率最高的排序算法,但它是最容易理解的排序算法之一。通过一步一步比较和交换位置,任何人都可以理解它的操作流程,这使它成为学习排序算法的第一步。希望通过这个“小朋友排队”的例子,让更多人能够轻松理解冒泡排序的核心概念。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/883159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样把学生的成绩单独告知家长?

期中考试季的到来让校园里的气氛似乎也变得紧张起来。家长们开始频繁地联系老师&#xff0c;希望了解孩子的表现&#xff1b;孩子们则在考试后&#xff0c;绞尽脑汁地想出各种理由&#xff0c;以期在成绩不理想时能减轻家长的失望。老师们更是忙得不可开交&#xff0c;不仅要批…

C++(标准输入输出流、命名空间、string字符串、引用)

C特点及优势 &#xff08;1&#xff09;实现了面向对象&#xff0c;在高级语言中&#xff0c;处理运行速度是最快&#xff1b; &#xff08;2&#xff09;非常灵活&#xff0c;功能非常强大&#xff0c;相对于C的指针优势&#xff0c;C的优势为性能和类层次结构&#x…

【天气识别系统】Python+卷积神经网络算法+人工智能+深度学习+TensorFlow+算法模型训练+Django网页界面

一、介绍 天气识别系统&#xff0c;以Python作为主要编程语言&#xff0c;通过收集了4种常见的天气图像数据集&#xff08;多云、雨天、晴天、日出&#xff09;&#xff0c;然后基于TensorFlow搭建卷积神经网络算法模型&#xff0c;通过多轮迭代训练&#xff0c;最后得到一个识…

Go 语言基础教程:6.条件判断

在这篇教程中&#xff0c;我们将通过一个简单的 Go 语言程序来学习条件判断结构的使用。以下是我们要分析的代码&#xff1a; package mainimport "fmt"func main() {if 7%2 0 {fmt.Println("7 is even")} else {fmt.Println("7 is odd")}if 8…

社交媒体与客户服务:新时代的沟通桥梁

在数字化时代&#xff0c;社交媒体已成为人们日常生活中不可或缺的一部分&#xff0c;它不仅改变了人们的沟通方式&#xff0c;也深刻影响着企业的客户服务模式。从传统的电话、邮件到如今的社交媒体平台&#xff0c;客户服务的渠道正在经历一场前所未有的变革。社交媒体以其即…

聚类分析算法——K-means聚类 详解

K-means 聚类是一种常用的基于距离的聚类算法&#xff0c;旨在将数据集划分为 个簇。算法的目标是最小化簇内的点到簇中心的距离总和。下面&#xff0c;我们将从 K-means 的底层原理、算法步骤、数学基础、距离度量方法、参数选择、优缺点 和 源代码实现 等角度进行详细解析。…

Easy Excel合并单元格情况简单导入导出

需求 实现报表数据的导入导出&#xff0c;表格中部分数据是系统生成&#xff0c;部分数据是甲方填写&#xff0c;录入系统。 批号唯一 Maven <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.…

《IDE 巧用法宝:使用技巧全解析与优质插件推荐》

在日常撸代码的时候&#xff0c;相信兄弟们在IDEA 中用到不少插件&#xff0c;利用插件&#xff0c;不仅可以提高工具效率&#xff0c;撸起代码来&#xff0c;也格外的娃哈哈…… 一、IntelliJ IDEA 作为一个资深 Java 程序员&#xff0c;除了 IDEA 中默认的插件&#xff0c;我…

linux入门之必掌握知识点

#1024程序员节&#xff5c;征文# Linux基础 top命令详解 top命令是用来查看进程系统资源使用情况的工具&#xff0c;它可以动态的现实。 top命令执行后&#xff0c;按大写M可以按内存使用情况进行排序&#xff0c;大写P可以按CPU使用情况进行排序&#xff0c;大写H可以显示线…

GNN+A2C 强化学习训练一个粒子避障决策模型

最近想尝试下使用GNN A2C 进行强化学习&#xff0c;GNN 可以充当一个特征提取器&#xff0c;这样可以增加强化学状态空间因为张量长度受限泛化能力不足的缺点&#xff0c;之前做强化学习的时候受限于需要在环境里提取每个对手的特征&#xff0c;在每个不同场景下因为对手的数量…

使用excel.js(layui-excel)进行layui多级表头导出,根据单元格内容设置背景颜色,并将导出函数添加到toolbar

本段是菜狗子的碎碎念&#xff0c;解决办法请直接从第二段开始看。layui多级表头的导出&#xff0c;弄了两天才搞定&#xff0c;中途一度想放弃&#xff0c;还好坚持下来了。一开始用的是layui的toolbar里自带的那个导出&#xff0c;但是多级表头没有正常导出&#xff0c;单元格…

【功能安全】技术安全概念TSC

目录 01 TSC定义 02 TSC注意事项 03 TSC案例 01 TSC定义 所处位置 TSC:Technical safety concept技术安全概念 TSR:Technical safety requirement技术安全需求 在系统开发阶段属于安全活动4-6 系统层产品开发示例 TSC目的

Codeforces Round 981 (Div. 3)

前言&#xff1a; 记录一下自己昨天晚上打的div3吧&#xff0c;感觉自己好久没写博客&#xff0c;以后可能会更新一些其他内容&#xff0c;在这里先买个关子&#xff0c;我要现在今年沉淀几个月&#xff0c;所以这几天可能不会更新博客&#xff0c;今天先出来冒个泡先。 正文&a…

数理统计(第3章:单侧假设检验)

目录 概念&#xff0c;步骤 单个正态母体 两个正态母体 概念&#xff0c;步骤 如果构造统计量是一个未知数&#xff0c;则构造不成统计量&#xff0c;所以拿来构造统计量&#xff0c;用保守估计作为假设&#xff1a;有无显著提高&#xff0c;减小&#xff0c;则假设没有显著…

【在Win11下安装ubuntu +图形化界面】

在win11下安装ubuntu 一、安装流程1. 前期准备&#xff1a;先配置好基础设置2. 安装 ubuntu3. ubuntu进行配置4. 下载图形化界面 并安装 二、遇到的问题问题1. win11安装wsl报错&#xff1a;无法解析服务器的名称或地址1. 方法一&#xff1a;更改DNS&#xff08;对本人无效&…

SpringBoot最佳实践之 - 项目中统一记录正常和异常日志

1. 前言 此篇博客是本人在实际项目开发工作中的一些总结和感悟。是在特定需求背景下&#xff0c;针对项目中统一记录日志(包括正常和错误日志)需求的实现方式之一&#xff0c;并不是普适的记录日志的解决方案。所以阅读本篇博客的朋友&#xff0c;可以参考此篇博客中记录日志的…

【问题解决】三维相关:​Unity Package Manager中没有Newtonsoft Json‌​

问题&#xff1a; 在Unity开发中&#xff0c;用到复杂的json的数据格式&#xff0c;需要将对象和json数据之间相互转换。Unity原生json支持不适用复杂json&#xff08;例如嵌套数组、动态键值对等&#xff09;。大部分人推荐直接在Package Manager中搜索导入(如怎么在unity3D工…

Jupyter Notebook 中使用render_notebook渲染pyecharts图像不显示的一种情况

一开始我发现自己的jupyter文件在渲染pyecharts图片时一开始可以显示&#xff0c;但后来不知道怎么的就不显示了&#xff0c;查找了很多方法&#xff0c;但是没有效果&#xff0c;都是改js渲染什么的&#xff0c;还有就是参数不对的&#xff0c;对于我来说都没什么用&#xff0…

excel中,将时间戳(ms或s)转换成yyyy-MM-dd hh:mm.ss或毫秒格式

问题 在一些输出为时间戳的文本中&#xff0c;按照某种格式显示更便于查看。 如下&#xff0c;第一列为时间戳(s)&#xff0c;第二列是转换后的格式。 解决方案&#xff1a; 在公式输入框中输入&#xff1a;yyyy/mm/dd hh:mm:ss TEXT((A18*3600)/8640070*36519, "yyy…

从传统到智能,从被动监控到主动预警,解锁视频安防平台EasyCVR视频监控智能化升级的关键密钥

视频监控技术从传统监控到智能化升级的过程是一个技术革新和应用场景拓展的过程。智能视频监控系统通过集成AI和机器学习算法&#xff0c;能够实现行为分析、人脸识别和异常事件检测等功能&#xff0c;提升了监控的准确性和响应速度。这些系统不仅用于传统的安全防护&#xff0…