C++实现排序算法:冒泡排序

目录

前言

冒泡排序性质

C++代码实现冒泡排序

冒泡图解

第一趟排序

第二趟排序

第三趟排序

排序结果

结语


前言

        冒泡排序的基本思想是通过从前往后(从后往前)两两比较,若为逆序(即arr[i] < arr[i + 1])则交换。整个排序方式像是在水底泡泡往上浮。本文会给出冒泡排序的C++实现,并辅以图形解释冒泡排序的过程。

冒泡排序性质

排序时间复杂度空间复杂度是否稳定
冒泡排序O(n^2)O(1)

C++代码实现冒泡排序

冒泡排序C++实现

#include <iostream>
#include <vector>using namespace std;void Print(vector<int> &arr)
{for (auto v : arr){cout << v << ' ';}cout << endl;
}int main()
{// arr待排序的vector对象。这里以将arr最终调整为升序为例vector<int> arr{9, 1, 6, 7, 6};for (int i = 0; i < arr.size(); i++){// flag 为一个标志, 如果有一趟没有进行数据交换,// 则该序列已经为有序序列, 可以提前跳出循环, 完成排序bool flag = false;for (int j = 0; j < arr.size() - 1 - i; j++){if (arr[j] > arr[j + 1]){// 满足条件 进行元素交换std::swap(arr[j], arr[j + 1]);// 修改标志位,证明本趟排序中发生过元素交换flag = true;}}// 判断这次比较过程中是否进行交换,// 如果没有进行交换则待排序序列已经为有序序列。就可以提前跳出循环。if (!flag){break;}}// 输出排序后的结果。Print(arr);return 0;
}

运行结果

冒泡图解

下标01234
初始序列91676

第一趟排序

注意:这里的一趟以一次完整的内层循环作为一趟,即在本趟排序中 i 值不变

第一趟第一次比较i == 0
j == 0j+1 == 1
91676
当前arr[j] > arr[j+1] 进行交换  j++ == 1
本次比较后交换结果19676
第一趟第二次比较i == 0 
j == 1j+1 == 2
19676
当前arr[j] > arr[j+1] 进行交换  j++ == 2
本次比较后交换结果16976
第一趟第三次比较i == 0 
j == 2j+1 == 3
16976
当前arr[j] > arr[j+1] 进行交换  j++ == 3
本次比较后交换结果16796
第一趟第四次比较i == 0 
j == 3j+1 == 4
16796
当前arr[j] > arr[j+1] 进行交换  j++ == 4
本次比较后交换结果16769
当前 j == 4 不满足进入循环条件 j < arr.size() - 1 - i 跳出内层循环, i++ = 2 进入第二趟排序.

        本趟排序中将 9 这个序列中最大的值,调整到最后一个位置。所以当前只有arr.size() - 1 - i个元素处于无序状态。

第二趟排序

下标01234
第二趟初始序列16769
第一次比较i == 1
j == 0j + 1 == 1
16769
当前arr[j] < arr[j+1] 不进行交换  j++ == 1
本次比较后交换结果16769
第二次比较i == 1
j == 1j++ == 2
16769
当前arr[j] < arr[j+1] 不进行交换  j++ == 2
本次比较后交换结果16769

第三次比较

i == 1
j == 2j++ == 3
16769
当前arr[j] > arr[j+1] 进行交换  j++ == 3
本次比较后交换结果16679
当前 j == 3 不满足进入循环条件j < arr.size() - 1 - i 跳出内层循环, i++ = 2 进入第三趟排序.

第三趟排序

下标01234
第三趟初始序列16679
第三趟第一次比较i == 2
j == 0j+1 == 1
16679
当前arr[j] < arr[j+1] 不进行交换  j++ == 1
本次比较后交换结果16679
第三趟第二次比较i == 2
j == 1j+1 == 2
16679
当前arr[j] == arr[j+1] 不进行交换  j++ == 2
本次比较后交换结果16679

当前 j == 2 不满足进入循环条件j < arr.size() - 1 - i 跳出内层循环, 

本次排序过程中没有进行一次数据交换(示例代码中的 flag 标志位 没有被改变),

所以该序列,已经是有序序列了. 所以提前跳出循环. 排序成功.

排序结果

最终排序结果:
下标01234
初始序列91676
最终排序结果16679
        根据结果,可以发现初始序列中和最终结果中的   6   6 的相对位置并没有发生改变,所以 冒泡排序是稳定

结语

        希望本文对你有所帮助,谢谢点赞关注收藏。如果有什么问题,欢迎私信或者评论区讨论。

感谢阅读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/63639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中介者模式的理解和实践

一、中介者模式概述 中介者模式&#xff08;Mediator Pattern&#xff09;&#xff0c;也称为调解者模式或调停者模式&#xff0c;是一种行为设计模式。它的核心思想是通过引入一个中介者对象来封装一系列对象之间的交互&#xff0c;使得这些对象不必直接相互作用&#xff0c;从…

PlantUML——类图

背景 类图是UML模型中的静态视图&#xff0c;其主要作用包括&#xff1a; 描述系统的结构化设计&#xff0c;显示出类、接口以及它们之间的静态结构和关系。简化对系统的理解&#xff0c;是系统分析与设计阶段的重要产物&#xff0c;也是系统编码和测试的重要模型依据。 在U…

【Java知识】Java进阶-如何开启远程调式

java远程调试 概述Java远程调试的开启与底层原理开启Java远程调试底层原理 JVM参数 概述 Java远程调试的开启与底层原理 开启Java远程调试 Java远程调试允许开发者在本地IDE&#xff08;如Eclipse、IntelliJ IDEA等&#xff09;中调试运行在远程服务器上的Java应用程序。以下…

入选国家数据局案例!浙江“一体化智能化公共数据平台”总体架构详解~

国家数据局在2024中国国际大数据产业博览会上发布了首批50个数字中国建设典型案例。案例涉及数据基础设施、数据资源、数字技术创新、数字政府、数字经济、数字社会、数字文化、数字生态文明等领域&#xff0c;集中反映了近年来数字中国建设的实践和成效。 其中&#xff0c;由…

vscode IntelliSense Configurations

IntelliSense 是一个强大的代码补全和代码分析功能&#xff0c;它可以帮助开发者提高编程效率。图中显示的是 VSCode 的 IntelliSense 配置界面&#xff0c;具体配置如下&#xff1a; Compiler path&#xff08;编译器路径&#xff09;: 这里指定了用于构建项目的编译器的完整路…

同三维TL200H2S6 6机位精品教育录播主机

录制点播、直播导播、互动、音频处理器、中控等多功能为一体 8路视频输入:6路SDI1路HDMI1(4K30)1路(3选1:HDMI2/2路VGA) 2路视频输出&#xff1a;1路HDMI1(4K30)1路&#…

欢乐斗地主案例

1&#xff0c;创建对象 package anlidoudizhu;public class pai implements Comparable<pai> {private Double value;private String name;Overridepublic int compareTo(pai o) {return -Double.compare(this.value,o.value);}//升序排序&#xff0c;treeset集合public…

技术型企业如何高效搭建企业博客以增强品牌影响力和市场竞争力

在数字化时代&#xff0c;技术型企业面临着激烈的市场竞争和快速变化的行业环境。为了在这场竞争中脱颖而出&#xff0c;企业需要寻找新的营销渠道和品牌建设工具。企业博客作为一种低成本、高效率的在线内容平台&#xff0c;已经成为技术型企业增强品牌影响力和市场竞争力的重…

go-zero(十二)消息队列

go zero 消息队列 在微服务架构中&#xff0c;消息队列主要通过异步通信实现服务间的解耦&#xff0c;使得各个服务可以独立发展和扩展。 go-zero中使用的队列组件go-queue&#xff0c;是gozero官方实现的基于Kafka和Beanstalkd 的消息队列框架,我们使用kafka作为演示。 一、…

【JAVA高级篇教学】第二篇:使用 Redisson 实现高效限流机制

在高并发系统中&#xff0c;限流是一项非常重要的技术手段&#xff0c;用于保护后端服务&#xff0c;防止因流量过大导致系统崩溃。本文将详细介绍如何使用 Redisson 提供的 RRateLimiter 实现分布式限流&#xff0c;以及其原理、使用场景和完整代码示例。 目录 一、什么是限流…

基于卷积神经网络的Caser算法

将一段交互序列嵌入到一个以时间为纵轴的平面空间中形成“一张图”后&#xff0c;基于卷积序列嵌入的推荐&#xff08;Caser&#xff09;算法利用多个不同大小的卷积滤波器&#xff0c;来捕捉序列中物品间的点级&#xff08;point-level&#xff09;、联合的&#xff08;union-…

ubuntu下的chattts 学习5:Example: self introduction

代码 import ChatTTS import torch import torchaudiochat ChatTTS.Chat() chat.load(compileFalse) # Set to True for better performance ################################### inputs_en """ chat T T S is a text to speech model designed for dialogu…

【银河麒麟高级服务器操作系统】修改容器中journal服务日志存储位置无效—分析及解决方案

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://documentkylinos.cn 服务器环境以及配置 【机型】 整机类型/架构&am…

HTML:表格重点

用表格就用table caption为该表上部信息&#xff0c;用来说明表的作用 thead为表头主要信息&#xff0c;效果加粗 tbody为表格中的主体内容 tr是 table row 表格的行 td是table data th是table heading表格标题 &#xff0c;一般表格第一行的数据都是table heading

[创业之路-187]:《华为战略管理法-DSTE实战体系》-1-从UTStarcom的发展历程,如何辩证的看企业初期发展太顺利中的危机

目录 一、UTStarcom&#xff08;UT斯达康&#xff09;的发展历程 1、创立与初期发展 2、快速成长与上市 3、技术创新与业务拓展 4、战略调整与持续发展 二、从UTStarcom的发展历程&#xff0c;如何辩证的看企业初期发展太顺利中的危机 1、企业初期发展的顺利表现 2、顺…

ubuntu系统生成SSL证书配置https

自签名【Lets Encrypt】的测试证书&#xff0c;有效期三个月。 第一步&#xff1a;安装acme&#xff0c;如果没有安装git&#xff0c;需要提前安装 下载came资源 git clone https://github.com/Neilpang/acme.sh.git 无法访问&#xff0c;可以试用gitee的资源&#xff0c;安…

CentOS 7 环境下常见的操作和配置

目录 1. CentOS 7 中的 vsftpd 配置与使用 安装与启动 vsftpd 配置 vsftpd&#xff08;/etc/vsftpd/vsftpd.conf&#xff09; 常见命令 2. 使用 yum 包管理器 3. 安全性与防火墙配置 开放端口 4. 使用 systemd 管理服务 5. SELinux 配置 查看 SELinux 状态 临时禁用…

《AI教学能力:开启教育新纪元》

一、摘要 AI 在教育领域的应用日益广泛&#xff0c;对教学能力产生了深远影响。本文将深入探讨 AI 教学能力的核心技术、实际应用、教学模式与策略、全球实践以及未来趋势&#xff0c;为教育的现代化发展提供参考。 摘要&#xff1a; AI 在教育领域的应用及其对教学能力的影响…

【信息系统项目管理师】第10章:项目进度管理过程详解

文章目录 一、规划进度管理1、输入2、工具与技术3、输出 二、定义活动1、输入2、工具与技术3、输出 三、排列活动顺序1、输入2、工具与技术3、输出 四、估算活动持续时间1、输入2、工具与技术3、输出 五、制订进度计划1、输入2、工具与技术3、输出 六、控制进度1、输入2、工具与…

域渗透入门靶机之HTB-Cicada

easy难度的windows靶机 信息收集 端口探测 nmap -sT --min-rate 10000 -p- 10.10.11.35 -oA ./port 发现开放了53&#xff0c;88&#xff0c;389等端口&#xff0c;推测为域控 进一步信息收集&#xff0c;对爆破的端口进行更加详细的扫描 小tips&#xff1a;对于众多的端口&…