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

Java冒泡排序算法之:变种版

什么是冒泡排序算法?

冒泡排序是一种简单的排序算法,通过多次遍历待排序的数组,逐步将最大的(或最小的)元素“冒泡”到数组的一端。它以其操作过程类似气泡从水底冒至水面而得名。


冒泡排序的工作原理

  1. 比较相邻元素: 从数组的第一个元素开始,逐个比较相邻的两个元素。如果前一个元素比后一个元素大(升序排序),则交换它们的位置。
  2. 将最大值(或最小值)移动到数组一端: 在每一轮遍历中,未排序部分的最大值(或最小值)会逐步移动到数组的末端。
  3. 重复以上步骤: 每次遍历的范围减小,直到整个数组有序。

代码实现

以下是冒泡排序的 Java 实现代码:

public class BubbleSort {public static void bubbleSort(int[] arr) {int n = arr.length;// 外层循环表示需要进行的轮数for (int i = 0; i < n - 1; i++) {boolean swapped = false; // 标志位,用于优化// 内层循环比较相邻元素for (int j = 0; j < n - 1 - i; j++) {if (arr[j] > arr[j + 1]) {// 如果前一个元素比后一个大,交换它们int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;swapped = true; // 标记发生了交换}}// 如果某一轮没有发生交换,说明数组已经有序if (!swapped) {break;}}}public static void main(String[] args) {int[] arr = {5, 2, 9, 1, 5, 6};System.out.println("排序前:");for (int num : arr) {System.out.print(num + " ");}System.out.println();bubbleSort(arr);System.out.println("排序后:");for (int num : arr) {System.out.print(num + " ");}}
}

示例运行结果

输入:
arr = {5, 2, 9, 1, 5, 6}

输出:
排序前:5 2 9 1 5 6
排序后:1 2 5 5 6 9


当然,基于传统的冒泡排序算法,我们还有其一种变种,简易代码实现如下:

public static void sort(int [] data){for (int j = 0;j < data.length-1;j++){int m = j;for (int k = j + 1;k < data.length;k++){if (data[k] < data[m]){m = k;}}int temp = data[m];int[m] = data[j];data[j] = temp;/*end of the loop*/}
}

可以说,传统冒泡是像一个大泡泡从底部向上冒一样,最终是由末尾的大数向小数排,而这种变种呢跟其恰好相反,是由开头的小数向大数排。 


冒泡排序的时间复杂度

  1. 时间复杂度:

    • 最好情况(数组已排序):O(n)O(n)O(n) (优化后)。
    • 最坏情况(数组逆序):O(n2)O(n^2)O(n2)。
    • 平均情况:O(n2)O(n^2)O(n2)。
  2. 空间复杂度:

    • O(1)O(1)O(1)(仅需常量级的额外空间)。

总结

冒泡排序虽然简单,但由于其效率较低,通常适用于小规模数据集或教学演示中。更高效的排序算法如快速排序或归并排序更适合实际应用场景。

 

 

 

 

 

 

相关文章:

Java冒泡排序算法之:变种版

什么是冒泡排序算法&#xff1f; 冒泡排序是一种简单的排序算法&#xff0c;通过多次遍历待排序的数组&#xff0c;逐步将最大的&#xff08;或最小的&#xff09;元素“冒泡”到数组的一端。它以其操作过程类似气泡从水底冒至水面而得名。 冒泡排序的工作原理 比较相邻元素&…...

AAPM:基于大型语言模型代理的资产定价模型,夏普比率提高9.6%

“AAPM: Large Language Model Agent-based Asset Pricing Models” 论文地址&#xff1a;https://arxiv.org/pdf/2409.17266v1 Github地址&#xff1a;https://github.com/chengjunyan1/AAPM 摘要 这篇文章介绍了一种利用LLM代理的资产定价模型&#xff08;AAPM&#xff09;…...

Spring常见知识

1、什么是spring的ioc&#xff1f; 其实就是控制反转&#xff0c;提前定义了一个bean&#xff0c;到时候使用的时候直接autowire就可以了。目的是减低计算机代码之间的耦合度。 创建三个文件&#xff0c;分别是Bean的定义、Bean的使用、Bean的配置。 IOC通过将对象创建和管理…...

计算机网络的五层协议

计算机网络的五层协议 ‌计算机网络的五层协议模型包括物理层、数据链路层、网络层、传输层和应用层&#xff0c;每一层都有其特定的功能和相关的协议。‌‌1 ‌物理层‌&#xff1a;负责传输原始的比特流&#xff0c;通过线路&#xff08;有线或无线&#xff09;将数据转换为…...

Bluetooth LE Audio - 蓝牙无线音频新应用 (上)

SIG联盟&#xff08;Bluetooth Special Interest Group&#xff09;自2020年开始推广新的LE Audio&#xff0c;在穿戴式装置掀起一股热潮&#xff0c;各个品牌商、制造商、第三方软件商都积极的寻找新的LE Audio规格究竟能提供什么样的新应用。究竟LE Audio如何改变你我的生活、…...

如何快速准备数学建模?

前言 大家好,我是fanstuck。数学建模不仅是解决复杂现实问题的一种有效工具,也是许多学科和行业中的关键技能。从工程、经济到生物、环境等多个领域,数学建模为我们提供了将实际问题转化为数学形式,并利用数学理论和方法进行求解的强大能力。然而,对于许多初学者而言,如…...

如何在linux系统上完成定时开机和更新github端口的任务

任务背景 1.即使打开代理&#xff0c;有的时候github去clone比较大的文件时也会出问题。这时需要每小时更新一次github的host端口&#xff1b; 2.马上要放假&#xff0c;想远程登录在学校的台式电脑&#xff0c;但学校内网又不太好穿透。退而求其次&#xff0c;选择定时启动电…...

Jupyter notebook中运行dos指令运行方法

Jupyter notebook中运行dos指令运行方法 目录 Jupyter notebook中运行dos指令运行方法一、DOS(磁盘操作系统&#xff09;指令介绍1.1 DOS介绍1.2 DOS指令1.2.1 DIR - 显示当前目录下的文件和子目录列表。1.2.2 CD 或 CHDIR - 改变当前目录1.2.3 使用 CD .. 可以返回上一级目录1…...

探索 Linux:(一)介绍Linux历史与Linux环境配置

探索 Linux:&#xff08;一&#xff09;介绍Linux历史与Linux环境配置 一. 计算机与操作系统的历史1.1计算机的历史1.2操作系统的历史 二、Unix 操作系统的历史三、Linux 与安卓的关系3.1Linux 与安卓的关系3.2安卓的历史 四、Linux 简单介绍五、Linux 环境安装5.1 虚拟机5.2 直…...

前端【2】html添加样式、CSS选择器

一、为html添加样式的三种方法 1、内部样式 2、外部样式 3、行内样式 二、css的使用--css选择器 1、css基本选择器 元素选择器 属性选择器 id选择器 class/类选择器 通配符选择器 2、群组选择器-多方面筛选 3、关系选择器 后代选择器【包含选择器】 子元素选择器…...

Yolov8 目标检测剪枝学习记录

最近在进行YOLOv8系列的轻量化&#xff0c;目前在网络结构方面的优化已经接近极限了&#xff0c;所以想要学习一下模型剪枝是否能够进一步优化模型的性能 这里主要参考了torch-pruning的基本使用&#xff0c;v8模型剪枝&#xff0c;Jetson nano部署剪枝YOLOv8 下面只是记录一个…...

LeDeCo:AI自动化排版、设计、美化海报

1.简介 平面设计是一门艺术学科&#xff0c;致力于创造吸引注意力和有效传达信息的视觉内容。今天&#xff0c;创造视觉上吸引人的设计完全依赖于具有艺术创造力和技术专长的人类设计师&#xff0c;他们巧妙地整合多模态图形元素&#xff0c;这是一个复杂而耗时的过程&#xf…...

Flink CDC解决数据库同步,异常情况下增量、全量问题

Flink 1.11 引入了 Flink SQL CDC&#xff0c;CDC 能给我们数据和业务间能带来什么变化&#xff1f;本文由 Apache Flink PMC&#xff0c;阿里巴巴技术专家伍翀 (云邪&#xff09;分享&#xff0c;内容将从传统的数据同步方案&#xff0c;基于 Flink CDC 同步的解决方案以及更多…...

01、flink的原理和安装部署

flink中主要有两个进程&#xff0c;分别是JobMManager和TaskManager&#xff0c;当然了根据flink的部署和运行环境不同&#xff0c;会有一些不同&#xff0c;但是主要的功能是类似的&#xff0c;下面我会讲下聊下&#xff0c;公司用的多的部署方式&#xff0c;基于yarn集群的部…...

美图脱掉“复古外衣”,在AI浪潮中蜕变

"人工智能就像电力一样&#xff0c;如果你的竞争对手正在使用它&#xff0c;你也需要使用它&#xff0c;否则你就会失去竞争力"&#xff0c;斯坦福大学教授和谷歌前首席科学家安德鲁恩格尔曾这样说到。 而近日拉开序幕的消费电子风向标——科技贸易展国际消费电子展…...

sqlalchemy The transaction is active - has not been committed or rolled back.

连接池参考 参考&#xff1a;https://blog.csdn.net/SunJW_2017/article/details/129332393 1、因为使用了连接池&#xff0c;没有释放 2、解决方法&#xff1a; from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, scoped_session from gree…...

47.数据绑定的PropertyChanged C#例子 WPF例子

[CallerMemberName] string propertyName null 这段代码中的 [CallerMemberName] 是一个特性&#xff08;Attribute&#xff09;&#xff0c;它应用于 propertyName 参数。这个特性的作用是&#xff0c;在编译时&#xff0c;如果调用 OnPropertyChanged 方法时没有显式提供 pr…...

网络安全 | Web安全常见漏洞和防护经验策略

关注&#xff1a;CodingTechWork 引言 OWASP (Open Web Application Security Project) Top 10是Web应用最常见的安全风险集合&#xff0c;帮助开发人员和安全专家识别和防止最严重的网络安全问题。以下是基于OWASP Top 10的Web安全防护经验策略与规则集。Web开发者必须对潜在…...

Agent一键安装,快速上手Zabbix监控!

目录 一、Linux操作系统部署Agent环境配置1、防火墙配置2、永久关闭selinux yum方式安装1、配置zabbix仓库2、安装agent3、配置 Zabbix-Agent 指向 Zabbix-Server4、启动agent服务 二进制包安装1、下载二进制包2、创建用户和目录及更改属主&#xff08;组&#xff09;3、解压二…...

Edge Scdn是什么,它如何提升网站安全性与访问速度?

随着网络攻击的日益猖獗&#xff0c;尤其是分布式拒绝服务&#xff08;DDoS&#xff09;攻击的频繁发生&#xff0c;如何保护网站的安全性并确保用户的访问体验变得极为重要。Edge Scdn&#xff08;内容分发网络&#xff09;作为一种新兴的技术方案&#xff0c;逐渐被越来越多的…...

5大核心功能深度解析:Umi-OCR开源离线文字识别工具的技术实现与应用指南

5大核心功能深度解析&#xff1a;Umi-OCR开源离线文字识别工具的技术实现与应用指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二…...

PS CC 2019安装避坑指南:解决86%卡住和D3DCOMPILER_47.dll缺失问题

Photoshop CC 2019完整安装指南&#xff1a;从下载到故障排除 Photoshop CC 2019作为Adobe Creative Cloud系列中的重要版本&#xff0c;至今仍被许多设计师和摄影师所青睐。虽然Adobe已推出更新的版本&#xff0c;但2019版因其稳定性和适中的系统需求&#xff0c;依然是中低配…...

推荐8款AI辅助论文写作工具(如爱毕业aibiye)与入门使用教程

人工智能技术在学术研究中的深度整合&#xff0c;显著优化了学术论文的创作效能与成果质量。通过文献智能分析、语义生成引擎和语言优化算法等核心技术&#xff0c;8款前沿工具系统覆盖了知识图谱构建、学术内容生成、多维度文本增强等核心研究场景。这些智能化平台基于深度学习…...

MatterGen:AI驱动的无机材料生成革命,开启新材料发现新纪元

MatterGen&#xff1a;AI驱动的无机材料生成革命&#xff0c;开启新材料发现新纪元 【免费下载链接】mattergen Official implementation of MatterGen -- a generative model for inorganic materials design across the periodic table that can be fine-tuned to steer the …...

如何用Planck-Pi实现低成本嵌入式开发?基于F1C200s的全栈方案解析

如何用Planck-Pi实现低成本嵌入式开发&#xff1f;基于F1C200s的全栈方案解析 【免费下载链接】Planck-Pi Super TINY & Low-cost Linux Develop-Kit Based On F1C200s. 项目地址: https://gitcode.com/gh_mirrors/pl/Planck-Pi Planck-Pi作为一款基于全志F1C200s芯…...

NVIDIA Orin AGX 开发环境快速部署指南

1. 开箱即用&#xff1a;NVIDIA Orin AGX开发环境全景概览 拿到NVIDIA Orin AGX开发板的第一天&#xff0c;我盯着这个黑色的小盒子看了十分钟——它看起来像块普通电路板&#xff0c;但内核却是当前最强的边缘计算芯片之一。作为过来人&#xff0c;我理解新手面对这块板子时的…...

ComfyUI-WanVideoWrapper显存优化终极指南:让8GB显卡也能流畅生成高清视频

ComfyUI-WanVideoWrapper显存优化终极指南&#xff1a;让8GB显卡也能流畅生成高清视频 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 还在为视频生成时的显存不足而烦恼吗&#xff1f;ComfyUI-…...

免费窗口调整工具:3分钟学会强制修改任意窗口大小

免费窗口调整工具&#xff1a;3分钟学会强制修改任意窗口大小 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些无法拖拽、尺寸固定的应用程序窗口而烦恼吗&#xff1f;Wi…...

PyTorch 3.0静态图分布式训练实战指南:从模型切分、通信压缩到GPU显存零冗余,7步上线千卡集群

第一章&#xff1a;PyTorch 3.0静态图分布式训练的演进逻辑与企业级定位PyTorch 3.0并非官方已发布的版本号&#xff08;截至2024年&#xff0c;PyTorch最新稳定版为2.3&#xff09;&#xff0c;但该命名在此语境中特指工业界对“具备生产就绪型静态图能力与原生分布式协同范式…...

港科资讯|郑光廷教授出席国际科技组织发展与全球科技治理论坛 分享协作实践

2026年3 月 28 日&#xff0c;国际科技组织发展与全球科技治理论坛在北京中关村国际创新中心成功举办。香港科技大学副校长&#xff08;研究及发展&#xff09;郑光廷教授受邀出席并发表主题演讲&#xff0c;香港科大内地办(北京)主任袁冶老师一同参会&#xff0c;与中外嘉宾交…...