冒泡排序以及改进方案
冒泡排序以及改进方案
介绍:
冒泡排序属于一种典型的交换排序(两两比较)。冒泡排序就像是把一杯子里的气泡一个个往上冒一样。它不断比较相邻的元素,如果顺序不对就像水泡一样交换它们的位置,直到整个序列像水泡一样,按照大小顺序排列好。当它发现一轮遍历中没有发生交换,就像是水泡都冒完了一样,就知道排序完成了。
图示:

冒泡排序性能
| 算法 | 最好时间 | 最坏时间 | 平均时间 | 额外空间 | 稳定性 |
|---|---|---|---|---|---|
| 冒泡 | O(n) | O(n2) | O(n2) | 1 | 稳定 |
普通版本的冒泡排序
通过简单的两层遍历,就可以实现了:
for (int i = 0; i < array.length; i++) {for (int j = 0; j < array.length -i -1; j++) {if (array[j] > array[j + 1]) {int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}
}
第一次改进:
当一个数组大小不是很混乱的时候,我们没必要每次都去交换:
例如:2,1,3,4,6 这样的数组,我们在第一次交换的时候就已经排好序了(1,2,3,4,6),我们无需再基于1,2,3,4,6排序,改进如下:
for (int i = 0; i < array.length; i++) {int flag = false; // 是否发生交换for (int j = 0; j < array.length -i -1; j++) {if (array[j] > array[j + 1]) { // 顺序不对,需要交换// 以下三行交换操作int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;flag = true; // 发生了交换}if(!flag) { // 如果没有发生交换,跳出循环,无需比对后面的break;}}}
第二次改进:
最后一次交换位置将整个数组分为了两部分:之前是未排序部分,之后是已排序部分。如此一来,下一次冒泡排序就只需在未排序部分进行冒泡排序即可。 根据这个思路再进行代码改进:
public class BubbleSort {// 冒泡排序算法实现public static void bubbleSort(int[] array) {if (array == null || array.length < 0) {return;}int sortIndex = array.length - 1; // 初始排序边界为数组末尾int lastChange = 0; // 记录最后一次交换的位置for (int i = 0; i < array.length; i++) {boolean flag = false; // 标记是否发生交换for (int j = 0; j < sortIndex; j++) {if (array[j] > array[j + 1]) {int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;flag = true;lastChange = j; // 更新最后一次交换的位置}}sortIndex = lastChange; // 更新排序边界if (!flag) { // 若未发生交换,说明数组已排序,结束排序break;}}}public static void main(String[] args) {int[] arr = {64, 34, 25, 12, 22, 11, 90};bubbleSort(arr);System.out.println("排序后的数组:");for (int i : arr) {System.out.print(i + " ");}}
}相关文章:
冒泡排序以及改进方案
冒泡排序以及改进方案 介绍: 冒泡排序属于一种典型的交换排序(两两比较)。冒泡排序就像是把一杯子里的气泡一个个往上冒一样。它不断比较相邻的元素,如果顺序不对就像水泡一样交换它们的位置,直到整个序列像水泡一样…...
QTextEdit 是 Qt 框架中的一个类,用于显示和编辑多行文本内容的可编辑部件
QTextEdit 是 Qt 框架中的一个类,用于显示和编辑多行文本内容的可编辑部件。 QTextEdit 提供了一个用于显示和编辑富文本(包括格式化文本、图像和链接等)和纯文本的文本编辑器。它支持基本的文本操作(如复制、粘贴、撤销、重做等…...
vue+jsonp编写可导出html的模版,可通过外部改json动态更新页面内容
效果 导出后文件结果如图所示,点击Index.html即可查看页面,页面所有数据由report.json控制,修改report.json内容即可改变index.html展示内容 具体实现 1. 编写数据存储的json文件 在index.html所在的public页面新建report.json文件ÿ…...
查看各ip下的连接数
netstat -n | awk /^tcp/ {print $5} | awk -F: {print $1} | sort | uniq -c| sort -rn netstat -n:显示所有的网络连接,不包括任何服务名的解释。awk /^tcp/ {print $5}:使用awk命令过滤出tcp协议的连接,并打印出每个连接的第五…...
Linux—进程状态
目录 一.前言 1.1.通过系统调用获取进程标示符 1.2.通过系统调用创建进程 二.进程状态 三.Z(zombie)-僵尸进程 四.僵尸进程危害 一.前言 学习进程的状态,我们首先了解一下进程的基本数据 1.1.通过系统调用获取进程标示符 由getpid()…...
万宾科技可燃气体监测仪科技作用全览
燃气管网在运行过程中经常会遇到燃气管道泄漏的问题,燃气泄漏甚至会引起爆炸,从而威胁人民的生命和财产安全,因此对燃气管网进行定期巡检是十分必要的工作。但是传统的人工巡检已不能满足城市的需要,除了选择增加巡检人员之外&…...
Python与GPU编程快速入门(三)
3、使用Numba加速Python代码 Numba 是一个 Python 库,它使用行业标准 LLVM 编译器库在运行时将 Python 函数转换为优化的机器代码。 您可能想尝试用它来加速 CPU 上的代码。 然而,Numba还可以将Python 语言的子集转换为CUDA,这就是我们将在这里使用的。 所以我们的想法是,…...
praseInt 和 逻辑或连用
这是做项目时遇到json文件转换 的一个小坑 将json 对象中的值 由字符串(数字字符串) 转换为 数值类型,如果是 转换失败 ,就返回 -1 这里的 parseInt 看起来非常简洁,但是存在一个小坑 transformedData[fieldsToCheck[i]] parseInt(origina…...
对属于国家秘密的地理信息的获取、持有、提供、利用情况进行登记并长期保存,实行可追溯管理
对属于国家秘密的地理信息的获取、持有、提供、利用情况进行登记并长期保存,实行可追溯管理 数据记录(包括获取、持有、提供、利用、销毁等全闭环)...
XAER_RMERR: Fatal error occurred in the transaction branch异常解决
XAER_RMERR: Fatal error occurred in the transaction branch异常解决 数据库权限问题!!!不是mysql驱动问题,执行下面命令解决 GRANT XA_RECOVER_ADMIN ON *.* TO root% ;...
Redis面试常见问题
Redis中的Lua脚本到底能不能保证原子性? Redis中Lua脚本的执行,可以保证并发编程中不可再拆分的这个原子性,但是没有保证数据库ACID中要么都执行要么都回滚的这个原子性。Lua脚本执行过程中命令产生错误,是不会回滚的,…...
浏览器触发下载Excel文件-Java实现
目录 1:引入maven 2:代码实现 3.导出通讯录信息到Excel文件 4.生成并下载Excel文件部分解释 1:引入maven 添加依赖:首先,在你的项目中添加EasyExcel库的依赖。你可以在项目的构建文件(如Maven的pom.xml)中添加以下依赖项:<dependency><groupId>com.alib…...
每日汇评:黄金在上涨趋势恢复之前面临修正性回调的风险
周三早些时候,金价触及六个月来的最高水平,接近 2050 美元; 在美联储转向鸽派立场后,美元和美债双双下跌; 日线图上的超买RSI指标警示多头,但即将到来的金十字图形使上行保持不变; 金价在周三亚…...
【开源】基于Vue.js的大学计算机课程管理平台的设计和实现
项目编号: S 028 ,文末获取源码。 \color{red}{项目编号:S028,文末获取源码。} 项目编号:S028,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 实验课程档案模块2.2 实验资源模块2…...
c++环形队列
c环形队列 c环形队列 c环形队列 #pragma once#include <iostream> #include <vector>/// <summary> /// - 环形队列 /// - 不是线程安全 /// </summary> /// <typeparam name"T"></typeparam> template <typename T> cla…...
智能客服核心技术——预测会话与答案生成
1.信息检索 2. 句型模板匹配标准问题生成答案 3.根据知识图谱推理得到答案...
C语言——计算Fibonacci数列
方式一 for循环 (20位) #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int n;int a[20]{1,1};for ( n 1; n <20; n){a[n]a[n-2]a[n-1];}for ( n 0; n < 20; n){if(n%50)printf("\n");printf("%12d ",a[n]);}return 0; …...
【ASP.NET CORE】.NET 6.0 NET CORE MVC连接SQLSERVER数据库
项目装NuGet包,具体版本如下 在appsettings.json中,添加连接字符串 代码如下: "ConnectionStrings": {"MVCSqlContext": "Serverlocalhost;DatabaseAddress;User IDsa;Passwordsa;TrustServerCertificatetrue&q…...
filebeat日志收集工具
1、优缺点 filebeat收集的数据可以发往多个主机,即远程收集 filebeat无法实现数据过滤,一般结合logstash的数据过滤一块使用 2、远程收集多主机的日志实验 实验目的:一体化查看日志 实验条件: 主机名 服务器 IP地址 组件 …...
一文例说嵌入式 C 程序的内聚和耦合
1 - 原理篇 低耦合,是指模块之间尽可能的使其独立存在,模块之间不产生联系不可能,但模块与模块之间的接口应该尽量少而简单。这样,高内聚从整个程序中每一个模块的内部特征角度,低耦合从程序中各个模块之间的关联关系…...
量子力学语言:狄拉克符号法进阶全集
量子力学语言:狄拉克符号法进阶全集 这是一篇面向“已经见过狄拉克符号,但还没有彻底吃透它”的完整长文。目标不是只会抄写公式,而是真正理解:狄拉克符号到底是什么、为什么它能统一波函数和矩阵、它怎样承载测量、表象变换、多体系统与密度矩阵。 导读 很多人第一次接触…...
无线网卡选购指南:别再被商家忽悠了,这5个参数才是关键
无线网卡选购指南:别再被商家忽悠了,这5个参数才是关键本文为付费专栏内容,全文约3800字,阅读需12分钟 适合人群:台式机用户、老旧笔记本用户、游戏玩家、NAS玩家前言:为什么你需要单独买无线网卡ÿ…...
人工智能通识课:Pandas 基础
在学习 Pandas 时,初学者最容易遇到的困难,并不是某个函数不会写,而是不清楚这些函数在整个数据处理流程中各自承担什么任务。如果将 Pandas 仅理解为分散的 API,知识点容易显得零碎;如果将其放回真实任务链中…...
spring-ai 第六模型介绍-聊天模型
spring-ai 第六模型介绍-聊天模型 官网 源码示例 spring-ai 第六模型介绍-聊天模型 官网 利用了预训练的语言模型,例如 GPT(生成型预训练变换器),以在自然语言中生成类似人类的响应 spring-ai网址【https://docs.spring.io/spri…...
OpenClaw+千问3.5-9B学习助手:自动整理笔记与生成习题
OpenClaw千问3.5-9B学习助手:自动整理笔记与生成习题 1. 为什么需要AI学习助手? 去年备考PMP证书时,我每天要处理上百页PDF讲义。最痛苦的莫过于手动整理重点和制作复习卡片——复制粘贴到半夜,第二天发现漏了关键图表ÿ…...
如何快速掌握 Dism++:Windows 系统优化的终极多语言解决方案
如何快速掌握 Dism:Windows 系统优化的终极多语言解决方案 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language Dism 是一款强大的 Windows 系统优化工具…...
被封杀三天后,龙虾带着“复仇版本“杀回来了
OpenClaw 4.5版本上线,能直接生成视频、图片和音乐。 有些故事,编剧都不敢这么写。 几天前,Anthropic对OpenClaw下了"封杀令"——只要系统提示词中出现OpenClaw的字样,Claude就会直接拒绝请求,返回一个冷冰…...
为什么你的PHP 8.9异步服务仍卡在I/O?3个致命配置错误+2套生产环境验证方案
第一章:PHP 8.9异步I/O的核心演进与认知重构PHP 8.9并未真实发布——截至2024年,PHP官方最新稳定版本为PHP 8.3,PHP 8.4已进入RC阶段,而PHP 8.9尚属虚构版本。这一标题本质是一次思想实验:它邀请开发者跳出“等待发布”…...
专业数据恢复师工具箱揭秘:UFS Explorer Pro的5个高级功能实战解析
专业数据恢复师工具箱揭秘:UFS Explorer Pro的5个高级功能实战解析 当一块硬盘的文件系统彻底崩溃,分区表不知所踪,或是RAID阵列的配置信息丢失时,普通数据恢复软件往往束手无策。这正是UFS Explorer Professional Recovery展现其…...
TwinCAT3实战指南:PLC变量与硬件IO的高效绑定技巧
1. TwinCAT3环境搭建与基础概念 第一次接触TwinCAT3的工程师常常会被各种专业术语搞得晕头转向。其实可以把TwinCAT3想象成一个"翻译官",它负责把PLC程序中的变量指令"翻译"成硬件能听懂的电信号。我刚开始使用时,最头疼的就是变量定…...
