排序算法之冒泡排序

news/2024/5/3 8:10:47

目录

  • 一、简介
  • 二、代码实现
  • 三、应用场景


一、简介

算法平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度排序方式稳定性
冒泡排序O(n^2 )O(n)O(n^2)O(1)In-place稳定

稳定:如果A原本在B前面,而A=B,排序之后A仍然在B的前面;
不稳定:如果A原本在B的前面,而A=B,排序之后A可能会出现在B的后面;
时间复杂度: 描述一个算法执行所耗费的时间;
空间复杂度:描述一个算法执行所需内存的大小;
n:数据规模;
k:“桶”的个数;
In-place:占用常数内存,不占用额外内存;
Out-place:占用额外内存。

在这里插入图片描述

算法步驟:

比较相邻的元素,如果第一个比第二个大,就交换它们两个;
对每一对相邻元素作同样的比较,从开始第一对到结尾的最后一对,这样在最后的元素就是最大的数;
针对所有的元素重复以上的步骤,除了数组最后已经排好序的数组;
重复步骤1~3,直到排序完成。


二、代码实现

public class BubbleSort {/*** flag的作用:flag是对冒泡排序算法的优化,每次内循环结束都会将长度为N-i-1数组中最大的元素交换到最后面,* 当内循环结束没有发生数据的交换,说明数组已经是有序的了,此时flag=false,退出循环。* @param arr*/public static void bubbleSort(int[] arr) {int len = arr.length;for (int i = 0; i < len - 1; i++) {boolean flag = true;for (int j = 0; j < len - i - 1; j++) {if (arr[j] > arr[j + 1]) {int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;flag = false;}}if (flag) {break;}}}public static void bubbleSortBack(int[] arr) {int len = arr.length;for (int i = 0; i < len - 1; i++) {boolean flag = true;for (int j = 0; j < len - i - 1; j++) {if (arr[j] < arr[j + 1]) {int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;flag = false;}}if (flag) {break;}}}public static void main(String[] args) {int[] arr = {12, 11, 15, 50, 7, 65, 3, 99};System.out.println("---排序前:  " + Arrays.toString(arr));bubbleSort(arr);System.out.println("从小到大排序后:  " + Arrays.toString(arr));bubbleSortBack(arr);System.out.println("从大到小排序后:  " + Arrays.toString(arr));}
}

在这里插入图片描述

三、应用场景

冒泡排序在实际工程中使用较少,但在教学、学习和特定场景下仍然具有一定的应用价值。对于大规模数据集的排序,通常会选择更高效的排序算法,如快速排序、归并排序等。

参考链接:
十大经典排序算法(Java实现)


http://www.mrgr.cn/p/84344810

相关文章

上位机图像处理和嵌入式模块部署(树莓派4b实现固件主流程)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 软件开发一般有软件需求、架构设计和详细设计、软件测试这四个部分。软件需求和软件测试都比较好理解&#xff0c;前者是说要实现哪些功能&#xf…

LD-Pruner、EdgeFusion(On-Device T2I)、FreeDiff、TextCenGen、MemLLM

本文首发于公众号&#xff1a;机器感知 https://mp.weixin.qq.com/s/KiyNfwYWU-wBiCO-hE9qkA 苏 The devil is in the object boundary: towards annotation-free instance segmentation using Foundation Models Foundation models, pre-trained on a large amount of data…

IIS 执行此操作时出错。 详细信息:web.config 错误,.net core项目

一、IIS 执行此操作时出错。 详细信息:web.config 错误,.net core项目运行报错 错误信息提示的很明确:IIS Web Core模块问题 二、解析: IIS下报错,但是直接启动exe文件可以正常运行。三、解决方案 先安装IIS,然后安装 Asp.net Core 运行时。更多: IIS10 隐藏 http server…

特性描述01、Segment Routing MPLS介绍

Segment Routing MPLS介绍 定义 段路由SR(Segment Routing)是基于源路由理念而设计的在网络上转发数据包的一种协议。Segment Routing MPLS是指基于MPLS转发平面的Segment Routing,下文简称为Segment Routing。Segment Routing将网络路径分成一个个段,并且为这些段和网络中…

C# 窗体应用程序 Chart控件显示实时曲线

IDE: VS2019 项目模板&#xff1a;C# windows 窗体应用(.NET Framework) 【参考】 B站上教程C#Chart控件画折线图的使用&#xff0c;关于Chart控件的属性&#xff0c;介绍得非常详细。B站上教程C#上位机Chart控件实时曲线终极讲解&#xff0c;对鼠标滚轮事件等&#xff0c;多…

用html画一个睡觉的熊动画

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>睡觉的熊动画</title><link rel"stylesheet" href"./style.css"> </head><body><div id"contain…

【重回王座】ChatGPT发布最新模型gpt-4-turbo-2024-04-09

今天&#xff0c;新版GPT-4 Turbo再次在大型模型排行榜上荣登榜首&#xff0c;成功超越了此前领先的Claude 3 Opus。另外&#xff0c;新模型在处理长达64k的上下文时&#xff0c;性能竟能够与旧版在处理26k上下文时的表现相当。 目前GPT-4 Turbo仅限于ChatGPT Plus的用户&…

Leetcode - 周赛393

目录 一&#xff0c;3114. 替换字符可以得到的最晚时间 二&#xff0c;3115. 素数的最大距离 三&#xff0c;3116. 单面值组合的第 K 小金额 四&#xff0c; 3117. 划分数组得到最小的值之和 一&#xff0c;3114. 替换字符可以得到的最晚时间 本题是一道模拟题&#xff0c;…

java spring boot 2 开发实战笔记

本案例是java sping boot 2.2.1 第一步搭建环境:安装依赖 由于我们公司项目是1.8 环境不能乱,我现在自己的电脑是1.8环境,所以本次整理的boot 代码 也只能用1.8 boot版本为:2.2.1,新建项目后,在xml 文件中复制上以下代码 xml配置,最精简运行起来的需要配置一个数据库…

【代码随想录】【动态规划】day51:● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费

股票含冷冻期 def maxProfit(self, prices):""":type prices: List[int]:rtype: int"""if len(prices)<1:return 0else:dp[[0]*2 for _ in range(len(prices))]dp[0][0]-prices[0]dp[0][1]0dp[1][0]max(dp[0][0],dp[0][1]-prices[1])dp[1][1]…

Github 2024-04-16Python开源项目日报 Top10

根据Github Trendings的统计,今日(2024-04-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10TypeScript项目1Vue项目1系统设计指南 创建周期:2507 天开发语言:Python协议类型:OtherStar数量:241693 个Fork数量:42010 次…

个人 Scrum Day 4

一、项目总结 昨天已完成的工作:食堂列表界面 今日计划完成工作:用户登录系统 工作中遇到的困难:使用新版微信小程序的api接口和设计登录弹窗。 二、代码签入 https://github.com/gdut-canteen/gdut-canteen/commit/79cb13c09bc60343e20561a989d3eaaf8dc7075f 三、运行部分截…

aaPanel面板和宝塔(BT)面板安装及命令

aaPanel面板和宝塔面板都是同一家公司在运营,只是aaPanel面板主要服务于海外客户,宝塔面板服务于本地客户。通常如果使用的是海外的服务器部署web环境,建议使用aaPanel面板。宝塔面板是一款基于 Web 的管理服务器的面板软件,它可以帮助用户方便地管理服务器的各种功能。面板…

租用境外服务器,越南服务器的优势有哪些

自从中国加入世界贸易组织之后&#xff0c;国内经济增加速度非常快&#xff0c;同时越来越多的人选择去东南亚国家发展&#xff0c;因为当地的中国人很多&#xff0c;所以中国企业在当地面临着更小的文化差异。东南亚地区也是最新的经济体&#xff0c;互联网正处于蓬勃发展的阶…

数据结构:线性表————单链表专题

&#x1f308;个人主页&#xff1a;小新_- &#x1f388;个人座右铭&#xff1a;“成功者不是从不失败的人&#xff0c;而是从不放弃的人&#xff01;”&#x1f388; &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f3c6;所属专栏&#xff1…

vue和react通用后台管理系统权限控制方案

1. 介绍 在任何企业级应用中&#xff0c;尤其是后台管理系统&#xff0c;权限控制是一个至关重要的环节。它确保了系统资源的安全性&#xff0c;防止非法访问和操作&#xff0c;保障业务流程的正常进行。本文件将详细解析后台管理系统中的权限控制机制及其实施策略。 那么权限…

使用Docker部署开源建站工具—Halo,并实现个人博客公网访问

目录 推荐 前言 1. Docker部署Halo 1.1 检查Docker版本 如果未安装Docker可参考&#xff1a; 已安装Docker步骤&#xff1a; 1.2 在Docker中部署Halo 2. Linux安装Cpolar 2.1 打开服务器防火墙 2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址 4. 固定Halo公网…