c++基础十四(冒泡排序)

2023-11-10

冒泡排序


  基本思路:对于一组要排序的元素列,依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面,如此继续,直到比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成。
  例子:数组Num[5]={9,6,7,3,1},要求将Num内的元素进行冒泡排序并打印出来。
分析:
过程:

在这里插入图片描述

  Num[5]第一次进行一次整体的比较后,筛选出了9这个最大值后,后续的比较中,9不会进行比较.

在这里插入图片描述
  Num[5]根据上次同样的步骤进行比较后,筛选出7后,后续的比较中,7不会进行比较.

在这里插入图片描述
  Num[5]根据上次同样的步骤进行比较后,筛选出6后,后续的比较中,6不会进行比较.

在这里插入图片描述
  当最后两个数完成比较后,本次排序结束。

过程总结:
在这里插入图片描述

  排序轮数的总轮数是与元素的个数相关,排序的总轮数=元素个数-1(不包括与自己比较).
  比较次数也是与元素的个数相关,每层比较的次数=元素个数-1
  每进行一次排序轮数,就会筛选出一个最大值,并且本次筛选的最大值不会参与下一次排序的比较中,所以每进行一次排序轮数,都会少一个相对最大值,从而影响每一层的比较次数,每层比较次数=元素个数-已进行的排序轮数-1(这里要减1的原因是防止数组越界,比如数组长度为3,当数组小标为2时,长度为3,如果数组下标再加1,则长度为4,则会超过数组的访问范围)
  代码思路:需要两个循环和数的交换代码来实现,外循环是用来实现排序轮数,内循环用来实现比较次数,交换代码的功能是用来实现比较两个数,并且将小数放前,大数放后。

代码:

#include <iostream>
using namespace std;
int main ()
{
	int num[5]={9,6,7,3,1};
	for(int i=0;i<5-1;i++)  //排序轮数
	{
		for(int j=0;j<5-i-1;j++)  //比较次数
		{
		 if(num[j]>num[j+1])  //数的交换代码
		 {
		 	int temp;
		 	temp=num[j];
		 	num[j]=num[j+1];
		 	num[j+1]=temp; 	
		 }
		}
	}
	for (int k=0;k<5;k++)   
	cout<<num[k]<<" ";
	system ("pause"); 
	return 0;
}

运行界面:
在这里插入图片描述

总结:
  冒泡排序的难点有两个,第一是如何对两个数的大小进行判断并是否进行交互;第二是外、内层的循环实现的规律。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++基础十四(冒泡排序) 的相关文章

随机推荐

  • PCIe专题学习——4.0(物理层结构解析)

    之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍 了解了PCIe是一种封装分层协议 packet based layered protocol 主要包括事务层 Transaction layer 数据链路层 Data link lay
  • Java相关注解

    标题 TableField Mybatis plus使用注解 TableField exist false 注明非数据库字段属性 TableField exist false 注解加载bean属性上 表示当前属性不是数据库字段 但项目中必须
  • vue3 父子组件传参详解

    前言 我引用了大佬的文章 但我实在找不到网址链接了 我记录在笔记上的 如果大佬看见了 麻烦给我说一下 我注明一下出处 建议先看son vue 里面写了那三种方式 首先放一个我的demo defineProps什么的父子传参api不用引入 直
  • 06 科技英语|控制与优化学科词汇

    maneuver n 策略 v 操控 调遣 manipulate vt 熟练控制 scalability n 可扩展性 leverage n 杠杆 v 促使 改变 flexibility n 弹性 dispatch n 急件 v 调度 派遣
  • extern关键字的用法知识点总结

    extern关键字的用法 编译C文件的步骤 数据类型及其长度 知识点总结 一 extern关键字的用法 extern关键字可以用来声明变量 函数作为外部变量或者函数供其它文件使用 extern表明变量或者函数是定义在其他其他文件中的 例如
  • 《Python编程:从入门到实践》第九章练习题

    Python编程 从入门到实践 第九章练习题 Python编程 从入门到实践 第九章练习题 9 1 餐馆 9 2 三家餐馆 9 3 用户 9 4 就餐人数 9 5 尝试登录次数 9 6 冰淇淋小店 9 7 管理员 9 8 权限 9 9 电瓶
  • python+selenium+PhantomJS爬取唯品会

    由于唯品会是利用js动态生成html作为反爬机制 所以不能用以前的爬取html的方法进行爬取 本程序是用selenium PhantomJS对唯品会进行爬取 可以根据需要输入要爬取的商品 还有爬取的起始页和结束页 程序代码以及注释的内容如下
  • vue[el-table]表格内附件上传、elementui 的http-request 上传附件,并且还可以传参数

    解决 通过http request
  • cmd 窗口 make clean process_begin: CreateProcess(NULL, rm Dynamics.o test.o, …) failed.

    CMD执行make clean报错 make clean rm Dynamics o test o process begin CreateProcess NULL rm Dynamics o test o failed make e 2
  • layui 弹出iframe选择数据并获取数据

    var layer layui layer layer open type 2 2表示弹出的是iframe 1表示弹出的是层 offset auto title 选择题目 font size 18px area 500px 300px sc
  • 华为HCIE云计算之IPsan存储裸设备映射给Linux主机

    华为HCIE云计算之IPsan存储裸设备映射给Linux主机 一 环境简介 1 Linux系统版本 2 各服务器IP地址 二 配置数据存储 1 登录华为V3数据存储 2 创建LUN 3 创建Lun组 4 创建主机 5 创建主机组 6 创建主
  • 行业轮动策略(思想+源码)

    一 行业轮动策略简介 行业轮动是利用市场趋势获利的一种主动量化投资交易策略 其本质是利用不同投资品种强势时间的错位对行业品种进行切换以达到投资收益最大化的目的 通俗点讲就是根据不同行业的区间表现差异 性进行轮动配置 力求能够抓住区间内表现较
  • yarn add报错error: Missing list of packages to add to your project.

    问题描述 运行yarn add命令安装全部依赖项报错 原因 yarn安装全部依赖是 yarn 或者 yarn install 不是yarn add这个命令 yarn add 后面需要跟具体的包名安装某个包 解决 更换成 yarn 或者 ya
  • DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)之一

    1 结构框图 2 管脚功能描述 管脚符号 类型 描述 A0 A9 A10 AP A11 A12 BC A13 Input 地址输入 为ACTIVATE命令提供行地址 和为READ WRITE命令的列地址和自动预充电位 A10 以便从某个ba
  • 基于Selenium模块实现无界面模式 & 执行JS脚本

    此篇文章主要介绍如何使用 Selenium 模块实现 无界面模式 执行JS脚本 把滚动条拉到底部 并以具体的示例进行展示 1 Selenium 设置无界面模式 创建浏览器对象之前 创建 options 功能对象 options webdri
  • Qt 自动单元测试Auto Test Project详解

    Qt 自动单元测试Auto Test Project详解 有时 残缺也是一种美 测试 则意味着需要投入 有些项目的迭代周期很短 如果也搞一个 test 则可能性价比很低 Qt 自动单元测试Auto Test Project详解 官方 htt
  • Eigen矩阵运算库快速上手

    目录 1 配置 2 初始化 2 1 Array类 2 2 Vector类 2 3 Matrix类 2 4 Vector赋值 2 5 高级初始化 3 矩阵计算 3 1 矩阵基本计算 3 2 线性求解 3 3 特征值计算 3 4 奇异值分解 总
  • spring的自动装配三种模式

    第一种装配模式是我们非常熟悉的xml配置 这种装配需要写id class 还有这个类具体的属性值等等 较为麻烦 第二种byName和byType的自动装配模式 如何设置呢 我们有三个类 cat dog people 并且people种有ca
  • MATLAB进阶教程第一节(图形绘制)

    本节是matlab进阶教程的第一节 头一次看的小白请先看完我的matlab入门基础 方便消化 对那些急需图形绘制的朋友将会有很大帮助 一 二维图形的绘制 1 1plot函数 形式 plot X Y S X Y是向量 分别表示点集的横坐标和纵
  • c++基础十四(冒泡排序)

    冒泡排序 基本思路 对于一组要排序的元素列 依次比较相邻的两个数 将比较小的数放在前面 比较大的数放在后面 如此继续 直到比较到最后的两个数 将小数放在前面 大数放在后面 重复步骤 直至全部排序完成 例子 数组Num 5 9 6 7 3 1