数据结构奇妙旅程之深入解析冒泡排序
冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
工作原理
- 比较相邻的元素:如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
优点
- 算法简单,容易理解。
- 稳定性排序,相等元素的相对顺序在排序后不会改变。
缺点
- 时间复杂度高,平均和最坏情况都是 O(n^2),其中 n 是待排序元素的数量。
- 交换操作导致数据移动量大。
Java 代码实现
下面是一个简单的冒泡排序的 Java 实现:
public class BubbleSort {public static void bubbleSort(int[] arr) {int n = arr.length;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;}}}}public static void main(String[] args) {int[] arr = {64, 34, 25, 12, 22, 11, 90};bubbleSort(arr);System.out.println("Sorted array: ");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}}
}
在这个代码中,bubbleSort 方法是冒泡排序的实现。它使用了两层循环:外层循环控制排序的轮数,内层循环进行相邻元素的比较和交换。
在 main 方法中,我们创建了一个待排序的数组 arr,并调用 bubbleSort 方法进行排序。最后,我们遍历排序后的数组并打印出来。
优化
冒泡排序可以通过一些优化来减少不必要的比较和交换次数。例如,如果在某一轮遍历中没有发生任何交换,那么数组已经是有序的,可以提前结束排序。这可以通过添加一个标志位来实现。
虽然冒泡排序在实际应用中并不常用,因为它的效率相对较低,但它对于理解排序算法的基本思想和入门学习非常有帮助。在数据量较大时,通常使用更高效的排序算法,如快速排序、归并排序等。
相关文章:
数据结构奇妙旅程之深入解析冒泡排序
冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成…...
解决 sudo apt update E: The repository is not signed.
一段时间没有用ubuntu系统,出现了很多这样的报错 解决方法 cd /etc/apt/sources.list.d ls然后把报错的项目从里面移除,例如 sudo rm cudnn-local-ubuntu2004-8.7.0.84.list全部移除后,再sudo apt-get update就能成功...
SCT2A26STER5.5V-100V Vin,4A峰值限流,高效异步降压DCDC转换器,替代LM5012、LM5013、LM5017、LM5164
• 5.5V-100V 输入电压 • 最大输出电压:30V • 2A 连续输出电流 • 4A峰值电流限制 • 1.2V 1% 反馈电压 • 集成500mΩ 高侧功率 MOSFETs • 140uA静态电流 • 恒定导通时间控制模式 • 4ms 内置软启动时间 • 300KHz 固定开关频率 • 可编程输入电压欠…...
前端学习资源整合
整合优质前端学习资源和文章,不定期更新。 JavaScript 现代 JavaScript 教程 官网:https://zh.javascript.info/GitHub:https://github.com/javascript-tutorial/zh.javascript.info 优秀的JS代码规范 官方英文版:https://gi…...
第16篇:奇偶校验器
Q:本期我们将实现4位奇偶校验逻辑电路,即校验4位二进制代码中 “1” 的个数是奇数或偶数。 A:奇偶校验器的基本原理:采用异或运算对“1”的奇偶个数进行校验,从最高位依次往最低位进行连续异或运算。如果最后的异或运…...
Obsidian+PicGo+Gitee搭建免费图床
之前使用PicGoGitee配合Typora,后来因为换电脑Typora管理笔记不方便,换到Obsidian笔记,此处记录重新搭建图床的坑与经验。 主要参考# picGogitee搭建Obsidian图床,实现高效写作! 1 下载安装PicGo 下载链接https://mo…...
计算机网络复试总结(五)
可能会问: 基础知识问题: 请简述TCP/IP协议栈的层次结构及其功能。 TCP/IP协议栈的层次结构及其功能可以简要概述如下: 层次结构: TCP/IP协议栈通常被划分为四个主要层次,从底层到高层分别是网络接口层(也…...
设计模式 --4:工厂方法模式
总结 : 个人理解: 工厂方法模式就是在简单工程模式的基础下将工厂类抽象出来。如果不抽象工厂类 ,每一次创建一个新的算法,都要修改原来的工厂类,这不符合 开放–封闭原则 将工厂类给抽象出来,让具体的算法…...
Linux系统centos7.6更换yum源以及下载安装包到指定目录
一、Linux系统centos7.6更换yum源 [rootlocalhost sofware]# cd /etc/yum.repos.d/ [rootlocalhost yum.repos.d]# mkdir back [rootlocalhost yum.repos.d]# mv * back [rootlocalhost yum.repos.d]# cp -a /root/software/CentOS7-Base-163.repo . #将准备好的yum源拷贝到指…...
蓝桥杯-子矩阵
""" 题目来源 https://www.lanqiao.cn/problems/3521/learning/?page1&first_category_id1&name%E5%AD%90%E7%9F%A9%E9%98%B5 """ import os import sys from collections import deque# 请在此输入您的代码 n, m, a, b map(int, inpu…...
Nginx 故障排查之斜杠(/) --(附 Nginx 常用命令)
问题场景: 项目中用到了多个子域名,测试环境通过子域名进行接口访问的时候返回 404 NOT_FOUND,经过排查测试后确定是 Nginx 配置问题,而导致事故的根本原因是运维在Nginx配置的时候少配置了一个斜杠(/)&am…...
【超全详解一文搞懂】Scala基础
目录 Scala 01 —— Scala基础一、搭建Scala开发环境安装Scala编译器在IDEA中进行scala编码 二、Scala简介与概述Scala简介Scala概述Scala代码规范 三、理解Scala变量与数据类型Scala的变量与常量Scala和Java变量的区别 Scala的数据类型 四、Scala的程序逻辑1.表达式2.运算符3.…...
16:00面试,16:06就出来了,问的问题有点变态。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到8月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…...
【CTFshow 】web 通关 1.0
🍬 博主介绍👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…...
babel起手式
Babel7 以下是各个 ECMAScript 版本引入的一些主要新语法和功能的汇总 ES5 / ECMAScript 5(2009年) 严格模式 "use strict"。JSON 对象。Array.prototype.forEach()、Array.prototype.map()、Array.prototype.filter()、Array.prototype.redu…...
AI大模型在医疗领域的应用案例:自然语言处理与医疗文本分析
随着人工智能技术的快速发展,AI大模型在自然语言处理、图像识别、语音识别等领域的应用越来越广泛。在医疗领域,AI大模型的应用正在深刻改变着医疗实践,为患者和医生带来前所未有的便利。近期AI医疗的概念也比较火热,本文将聚焦于…...
c语言常见错误
1.运算符“=”和“==”的误用 在if (“变量”==”常量”)表达式中最好写成 “常量”==“变量”的形式,否则容易造成逻辑判断不正确或者变量被错误赋值。 2.不要使用默认优先级,使用括号来保证自己的运算优先级! 3.网络序:所有设备和系统都是按照设备接收、发送数据的顺序…...
分别使用TCP/UDP实现互相实时发送消息,接收消息功能
什么是TCP? TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。它是互联网协议套件中的一部分,用于在网络上可靠地传输数据。TCP协议的主要特点包括: 面向连接:在TCP通信中,通信双方在通信之前必须先建立连接。连接建立后,数据传输完成后还需要显式…...
使用阿里CICD流水线打包Vue项目到阿里的docker镜像私仓,并自动部署到服务器启动服务
文章目录 使用阿里CICD流水线打包Vue项目到阿里的docker镜像私仓,并自动部署到服务器启动服务1、功能实现原理大家可以看我之前的两篇文章2、打包vue项目和打包咱们的Java项目过程差不多相同,大家可以看着上面的Java打包过程进行实验,下面是v…...
第十三届蓝桥杯物联网试题(省赛)
做后感悟: OLED显示函数需要一直显示,所以在主函数中要一直循环,为了确保这个检错功能error只输出一次,最好用中断串口进行接收数据,数据收完后自动进入中断函数中,做一次数据检查就好了,该开灯…...
Doris集群部署避坑指南:3FE+3BE配置全流程(含Java环境配置与常见问题解决)
Doris集群部署实战:3FE3BE高可用架构搭建与深度调优 在企业级数据分析场景中,Doris凭借其出色的实时分析性能和高并发处理能力,已成为众多企业的首选OLAP引擎。本文将基于3FE(Frontend)3BE(Backend…...
08-多平台集成实战
OpenClaw 多平台集成实战 “让 AI 助手跨越每个通讯渠道,无处不在。” — OpenClaw 在当今多元化的通讯环境中,一个优秀的 AI 助手不应该被限制在单一平台上。OpenClaw 的核心优势之一就是其强大的多平台集成能力,能够同时连接 Discord、Telegram、飞书、企业微信、QQ、钉钉…...
Mermaid Live Editor:5分钟快速创建专业图表的终极免费工具
Mermaid Live Editor:5分钟快速创建专业图表的终极免费工具 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-e…...
用Python和Geogebra手把手复现阿克曼转向模型(附完整代码与可视化)
用Python和Geogebra手把手复现阿克曼转向模型(附完整代码与可视化) 在自动驾驶和机器人领域,理解车辆如何转向是基础中的基础。但当你第一次看到那些复杂的公式时,是不是感觉像在看天书?别担心,今天我们就用…...
4步精通开源SMU调试工具:AMD Ryzen处理器深度配置与性能调优全攻略
4步精通开源SMU调试工具:AMD Ryzen处理器深度配置与性能调优全攻略 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址…...
HCPL-0700-000E,低输入电流、高增益且与高安全隔离性能的光耦
型号介绍今天我要向大家介绍的是 Broadcom 的光耦——HCPL-0700-000E。它的内部结构就像一个高效的“信号转换站”,结合了一个发光二极管和一个集成的高增益光子探测器。光电二极管和输出级采用独立引脚设计,当输入端接收到电流时,LED 会发出…...
SAP Analysis for Office 2.8 SP6 升级与常见问题解决指南
1. SAP Analysis for Office 2.8 SP6升级前的准备工作 升级软件就像给房子做装修,准备工作做得好,后续问题少一半。对于SAP Analysis for Office(简称AFO)2.8 SP6版本升级,我建议先做好这三件事: 第一&…...
RWKV7-1.5B-G1A多模态应用初探:从文本到简单图表描述生成
RWKV7-1.5B-G1A多模态应用初探:从文本到简单图表描述生成 1. 开篇:当语言模型遇见数据可视化 最近在测试RWKV7-1.5B-G1A模型时,我发现一个有趣的现象——这个原本设计用于文本处理的模型,居然能通过巧妙的Prompt设计,…...
Synopsys AXI VIP实战:如何用reorder和delay配置模拟真实SoC总线行为
Synopsys AXI VIP实战:用reorder与delay构建高保真SoC总线模拟环境 在SoC验证领域,AXI总线协议的复杂性常常成为验证工程师面临的主要挑战。当CPU通过Cache访问低速外设时,总线上的竞争、延迟和乱序响应会形成难以预测的行为模式。Synopsys A…...
HS2-HF Patch:驱动创作自由的智能补丁系统与需求动态匹配技术
HS2-HF Patch:驱动创作自由的智能补丁系统与需求动态匹配技术 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 在游戏创作领域,玩家对个性…...
