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.xdnf.cn/news/36392.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

selenium+python实现12306自动化抢火车票(二)

往期回顾&#xff1a; seleniumpython实现12306自动化抢火车票&#xff08;一&#xff09; 1、根据乘车人姓名匹配&#xff0c;支持1人或多人选择 定位出所有乘车人的元素集&#xff0c;根据姓名集合去元素集里循环迭代匹配&#xff0c;匹配上了操作选中 ele_alldriver.find_e…

基于openzeppelin插件的智能合约升级

一、作用以及优点 部署可升级合约&#xff0c;插件自动部署proxy和proxyAdmin合约&#xff0c;帮助管理合约升级和交互&#xff1b;升级已部署合约&#xff0c;通过插件快速升级合约&#xff0c;脚本开发方便快捷&#xff1b;管理代理管理员的权限&#xff0c;只有proxyAdmin的…

游戏引擎学习第36天

仓库 :https://gitee.com/mrxiao_com/2d_game 回顾之前的内容 在这个程序中&#xff0c;目标是通过手动编写代码来从头开始制作一个完整的游戏。整个过程不使用任何库或现成的游戏引擎&#xff0c;这样做的目的是为了能够全面了解游戏执行的每一个细节。开发过程中&#xff0…

MySQL-设置utf8mb4字符集以支持全面的字符显示

本文主要介绍如何通过统一使用utf8mb4字符集来实现在MySQL实例中存储emoji表情的最佳实践。 我们将从客户端、会话连接和MySQL实例等多个方面介绍如何配置和修改字符集以支持utf8mb4。 客户端和会话连接的字符集配置 为了确保能够正确存储和显示emoji表情&#xff0c;我们首…

【Linux从青铜到王者】数据链路层(mac,arp)以及ip分片

局域网通信 通过之前的学习&#xff0c;我们了解了应用层&#xff0c;传输层&#xff0c;网络层的协议和作用&#xff0c;这里先做个总结 应用层——http&#xff0c;https协议&#xff0c;也可以自己定义一套&#xff0c;作用是进行数据的处理传输层——tcp&#xff0c;udp协…

基于STM32的风速风向传感器设计

目录 引言系统设计 硬件设计软件设计系统功能模块 风速采集模块风向采集模块数据处理与显示模块控制算法 风速数据处理算法风向数据处理算法代码实现 风速数据采集与处理风向数据采集与处理数据显示与通信系统调试与优化结论与展望 1. 引言 随着气象监测需求的增加&#xff0…

13.在 Vue 3 中使用OpenLayers加载鹰眼控件示例教程

在 WebGIS 开发中&#xff0c;鹰眼控件 是一个常用的功能&#xff0c;它可以为用户提供当前地图位置的概览&#xff0c;帮助更好地定位和导航。在本文中&#xff0c;我们将基于 Vue 3 的 Composition API 和 OpenLayers&#xff0c;创建一个简单的鹰眼控件示例。 效果预览 在最…

安装certbot(ubuntu系统)

安装nginx 更新软件包列表 sudo apt update 更新软件包列表 sudo apt install nginx 更新软件包列表 sudo systemctl status nginx 注意&#xff1a;强烈推荐使用&#xff0c;系统直接安装nginx&#xff0c;&#xff08;不推荐使用docker安装nginx&#xff09;为后续更简单…

【C语言】C语言的变量和声明系统性讲解

声明和定义的概念 在C语言中&#xff0c;**声明&#xff08;Declaration&#xff09;和定义&#xff08;Definition&#xff09;**是两个重要的基础概念&#xff0c;它们都涉及到变量、函数、结构体等的使用&#xff0c;但功能和作用存在明显区别&#xff1a; 声明&#xff1a…

【Linux】文件的内核级缓冲区、重定向、用户级缓冲区(详解)

一.文件内核级缓冲区 在一个struct file内部还要有一个数据结构-----文件的内核级缓冲区 打开文件&#xff0c;为我们创建struct file&#xff0c;与该文件的所对应的操作表函数指针集合&#xff0c;还要提供一个文件的内核级缓冲区 1.write写入具体操作 当我们去对一个文件写…

MCU、ARM体系结构,单片机基础,单片机操作

计算机基础 计算机的组成 输入设备、输出设备、存储器、运算器、控制器 输入设备&#xff1a;将其他信号转换为计算机可以识别的信号&#xff08;电信号&#xff09;。输出设备&#xff1a;将电信号&#xff08;&#xff10;、&#xff11;&#xff09;转为人或其他设备能理解的…

JDK8新特性之Stream流01

Stream 流介绍 目标 了解集合的处理数据的弊端 理解Stream流的思想和作用 集合处理数据的弊端 当我们需要对集合中的元素进行操作的时候&#xff0c;除了必须的添加&#xff0c;删除&#xff0c;获取外&#xff0c;最典型的就是遍历集合。我们来体验集合操作的弊端&#xff…

【C++】—— map 与 multimap

【C】—— map 与 multimap 1 map1.1 map 和 multimap 参考文档1.2 map 类的介绍1.3 pair 类型介绍1.4 map的构造1.5 map的插入1.5.1 map 的插入方法1.5.2 验证1.5.3 再探pair1.5.4 make_pair 1.6 operator[]1.6.1 样例1.6.2 认识operator[]1.6.3 operator[] 的功能 1.7 map 的…

VTK知识学习(20)- 数据的存储与表达

1、数据的存储 1)、vtkDataArray VTK中的内存分配采用连续内存&#xff0c;可以快速地创建、删除和遍历&#xff0c;称之为数据数组(DataArray)&#xff0c;用类 vtkDataArray 实现。数组数据的访问是基于索引的&#xff0c;从零开始计数。 以 vtkFloatArray 类来说明如何在 …

HCIP-以太网交换安全

端口隔离&#xff1a;实现同一VLAN下的不同用户在二层不能互通&#xff08;可以实现在三层互通&#xff09;&#xff0c;同一个隔离组内是相互隔离的&#xff0c; MAC地址表功能&#xff1a;动态MAC地址表项&#xff0c;接口通告报文中的源MAC地址学习获得&#xff0c;表项可老…

电机功率、电压与电流的换算方法

在电气工程和相关行业中&#xff0c;电机的功率、电压和电流是三个重要的基本参数。它们之间有着密切的关系&#xff0c;而理解这些关系对于电机的选型、设计和应用至关重要。本文将详细阐述这三者之间的换算关系&#xff0c;以及相关公式的应用。 一、电机功率的定义 电机功…

【CKS最新模拟真题】获取多个集群的上下文名称并保存到指定文件中

文章目录 前言一、TASK二、解题过程1、问题一解题2、问题二解题 前言 月底考CKS,这是最新版的CKS模拟题 环境k8s版本ubuntu1.31 一、TASK 题目要求 Solve this question on: ssh cks3477 You have access to multiple clusters from your main terminal through contexts. …

智能合约的离线签名(EIP712协议)解决方案

一、解决核心问题 项目方不支付gas费&#xff0c;由用户自己发起交易&#xff0c;用户支付gas费。用户的数据保存在链下服务器中&#xff0c;token合约在链上&#xff0c;交易是由用户通过网页的DAPP发起。 后台服务、token合约、dapp如何配合工作是本方案的重点 二、总架构…

php:完整部署Grid++Report到php项目,并实现模板打印

一、下载Grid++Report软件 路径:开发者安装包下载 - 锐浪报表工具 二、 安装软件 1、对下载的压缩包运行内部的exe文件 2、选择语言 3、 完成安装引导 下一步即可 4、接收许可协议 点击“我接受” 5、选择安装路径 “浏览”选择安装路径,点击"安装" 6、完成…

SpringMvc完整知识点一

SpringMVC概述 定义 SpringMVC是一种基于Java实现MVC设计模型的轻量级Web框架 MVC设计模型&#xff1a;即将应用程序分为三个主要组件&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。这种分离…