当前位置: 首页 > 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;逐渐被越来越多的…...

ubuntu20.04 docker安装

Ubuntu | Docker DocsPost-installation steps | Docker Docs # 创建目录 sudo mkdir -p /etc/docker # 写入配置文件 sudo tee /etc/docker/daemon.json <<-EOF { "registry-mirrors": [ "https://docker-0.unsee.tech", &qu…...

初始C#.

一.模板 using System; using System.Collections.Generic; using System.L。inq; using System.Text; using System.Threading.Tasks;//引用命名空间 namespace First_progream//项目名或者命名空间 { internal class Program //类名 { static void Main(string[] args)…...

js高亮文本

高亮文本 const inputs ["这是一个普通文本&#xff0c;包含关键字测试。",<p style"font-size: 10px">这是一个<span>GVM</span> <strong>测试</strong>内容。</p>, ];const keywords ["测试", "G…...

解决SpringBoot 健康检测接口 actuator/health 访问一直卡着,但 actuator/info等其他接口能正常访问的问题

背景 最近在做服务迁移&#xff0c;迁移完后的新服务&#xff0c;直接将pod的配置丢到新的K8S集群中&#xff0c;健康监测一直失败 Debug思路 先看日志&#xff0c;日志显示SpringBoot已成功启动&#xff0c;按理说不应该无法访问其/actuator/health接口 拉长健康监测延时时…...

KVM创建ubuntu20.04虚机,部署K8S,再克隆出二份,做为Worker节点加入集群,通过Helm创建2个Pod,让它们之间通过域名互访

KVM创建ubuntu20.04虚机,部署K8S,再克隆出二份,做为Worker节点加入集群,通过Helm创建2个Pod,让它们之间通过域名互访 一.背景二.操作步骤1.安装KVMA.在BIOS中开启VT-dB.修改grub,开启iommu在/etc/default/grub 中 GRUB_CMDLINE_LINUX行 添加 intel_iommuon iommupt重新创建引导…...

GaussDB中的Vacuum和Analyze

GaussDB中的Vacuum和Analyze 基本概念与区别手动Vacuum和Analyze查看Vacuum和Analyze记录Autovacuum配置参数 基本概念与区别 使用VACUUM、VACUUM FULL和ANALYZE命令定期对每个表进行维护&#xff0c;主要有以下原因&#xff1a; VACUUM FULL可回收已更新或已删除的数据所占据…...

IvorySQL 4.2 发布

IvorySQL 4.2 已于 2025 年 1 月 13 日正式发布。新版本全面支持 PostgreSQL 17.2&#xff0c;并修复了多项 bug。 增强功能 PostgreSQL 17.1 增强功能 确保当 RLS 应用于非顶级表引用时&#xff0c;缓存的计划会标记为依赖于调用角色使 libpq 在 SSL 或 GSS 协议协商期间丢…...

浅谈云计算20 | OpenStack管理模块(下)

OpenStack管理模块&#xff08;下&#xff09; 五、存储管理5.1 存储管理概述 5.2 架构设计5.2.1 Cinder块存储架构5.2.2 Swift对象存储架构 六、网络管理6.1 网络管理概述6.2 架构解析6.2.1 Neutron网络服务架构6.2.2 网络拓扑架构 6.3 原理与流程6.3.1 网络创建原理6.3.2 网络…...

去年社融增量超32万亿 货币信贷平稳增长-乐享数科

数据显示&#xff0c;2024年全年&#xff0c;社会融资规模增量为32.26万亿元&#xff1b;去年12月末&#xff0c;社会融资规模同比增长8.0%&#xff0c;广义货币供应量&#xff08;M_[2]&#xff09;同比增长7.3%&#xff0c;人民币贷款同比增长7.6%&#xff0c;增速相比上月有…...

STM32 HAL库函数入门指南:从原理到实践

1 STM32 HAL库概述 STM32 HAL(Hardware Abstraction Layer)库是ST公司专门为STM32系列微控制器开发的一套硬件抽象层函数库。它的核心设计理念是在应用层与硬件层之间建立一个抽象层&#xff0c;这个抽象层屏蔽了底层硬件的具体实现细节&#xff0c;为开发者提供了一套统一的、…...