冒泡排序-排序算法

前言

如果有6个人站成一排,要将他们按从矮到高的顺序排列。你可能有多种方式来完成。但是如果其中有一个人特别高,比他身边的人高,在队伍中特别明显,你可以轻易看出那个最高的需要和身边的人交换位置,这是冒泡排序的核心原理。

案例

假如上面6个人的身高分别为176,167,172,178,172,182(单位cm)。

那么交换过程如下:

第 0 次交换:

第 1 次交换:

第 2 次交换:

第 3 次交换:

第 4 次交换:

这样这 6 个人就有序了。


定义

以上的过程就是冒泡排序了,通过重复地遍历未排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换位置。走访数列的工作是重复地进行直到无需再交换,也就是说数列已经有序。这个算法的名字由来是因为越小的元素会经由交换慢慢得像泡泡一样“浮”到数列的顶端,故此得名!

一趟只能保证一个元素有序,这可以从代码中看出,一次保证未排序的数列中最大值有序,例如案例中第一趟只能保证 182 有序,第二趟只能保证 178 有序。

冒泡排序是一种稳定的排序算法,值相同的元素,相对位置不会发生改变。例如案例中有两个身高172cm的人,一个叫小刚,一个叫小李,排序前后小刚一直在小李的左边。

冒泡排序的改进

有时候数列已经有序,可是冒泡排序还会不断遍历比较,只要某一趟没有交换两个数,说明数列有序,退出循环。

全部代码

#include <iostream>
using namespace std;void swap(int *num1,int *num2) //交换两个数
{int tmp;tmp = *num1;*num1 = *num2;*num2 = tmp;
}void BubbleSort(int arr[],int len)
{for(int i=0;i<len-1;i++) // n个元素,只需要让n-1个元素有序{bool sorted = true;  //标记这一趟排序是否有序for(int j=0;j<len-1-i;j++) {if(arr[j]>arr[j+1]){swap(&arr[j],&arr[j+1]);sorted = false; //交换了元素,说明交换前数组未排好序}}if(sorted) //某一趟未没有交换位置,说明数组已经有序,排序结束{break;}}	}int main(void) 
{int arr[] = {1,3,7,3,6,9};int len = sizeof(arr)/sizeof(arr[0]);BubbleSort(arr,len);for(int i=0;i<len;i++){cout<< arr[i] <<" ";}return 0;
}

可以自己添加调试代码,看看排序过程,并且理解遍历趟数和交换次数。

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

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

相关文章

二叉树的前序遍历 、二叉树的最大深度、平衡二叉树、二叉树遍历【LeetCode刷题日志】

目录 一、二叉树的前序遍历 方法一&#xff1a;全局变量记录节点个数 方法二&#xff1a;传址调用记录节点个数 二、二叉树的最大深度 三、平衡二叉树 四、二叉树遍历 一、二叉树的前序遍历 方法一&#xff1a;全局变量记录节点个数 计算树的节点数: 函数TreeSize用于…

案例086:基于微信小程序的影院选座系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

履机乘变,轻舟便楫:源启分布式PaaS深度赋能企业级技术平台建设

导语 源启分布式PaaS平台围绕应用视角为用户提供应用运行的全生命周期管控能力&#xff0c;提供注册中心、服务路由、网关、服务治理等中间件技术支持&#xff0c;实现应用之间的联通&#xff0c;解决客户多厂商产品不兼容、产品组合不可选择、孤岛效应等问题&#xff0c;满足…

ros2 基础学习12 分布式通信

智能机器人的功能繁多&#xff0c;全都放在一个计算机里&#xff0c;经常会遇到计算能力不够、处理出现卡顿等情况&#xff0c;如果可以将这些任务拆解&#xff0c;分配到多个计算机中运行岂不是可以减轻压力&#xff1f; 这就是分布式系统&#xff0c;可以实现多计算平台上的任…

android开发百度地图api实现定位图标随手机方向转动

该功能的实现依赖于手机中的传感器元件如陀螺仪、加速度计等&#xff0c;具体开发详见android的官方开发文档&#xff1a; 传感器概览 | Android 开发者 | Android Developershttps://developer.android.com/guide/topics/sensors/sensors_overview?hlzh-cn要自定义一个传…

Hive学习(13)lag和lead函数取偏移量

hive里面lag函数 在数据处理和分析中&#xff0c;窗口函数是一种重要的技术&#xff0c;用于在数据集中执行聚合和分析操作。Hive作为一种大数据处理框架&#xff0c;也提供了窗口函数的支持。在Hive中&#xff0c;Lag函数是一种常用的窗口函数&#xff0c;可以用于计算前一行…

《动手学深度学习》学习笔记 第6章 卷积神经网络

本系列为《动手学深度学习》学习笔记 书籍链接&#xff1a;动手学深度学习 笔记是从第四章开始&#xff0c;前面三章为基础知道&#xff0c;有需要的可以自己去看看 关于本系列笔记&#xff1a; 书里为了让读者更好的理解&#xff0c;有大篇幅的描述性的文字&#xff0c;内容很…

194.【2023年华为OD机试真题(C卷)】单行道汽车通行时间(迭代计算—JavaPythonC++JS实现)

请到本专栏顶置查阅最新的华为OD机试宝典 点击跳转到本专栏-算法之翼:华为OD机试 🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,高质量解题代码,详细代码讲解,助你深入学习,深度掌握! 文章目录 【2023年华为OD机试真题(C卷)】单行道汽车通行时间(…

基于SpringBoot的智慧生活商城系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的智慧生活商城系统,java…

[足式机器人]Part2 Dr. CAN学习笔记-自动控制原理Ch1-9PID控制器

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-自动控制原理Ch1-9PID控制器&#xff09; P —— Proportional I —— Integral D —— Derivative 当前误差/过去误差/误差的变化趋势 K p ⋅ e K_{\mathrm{p}}\cdot e Kp​⋅e&#xff1a;比…

golang并发编程-channel

在golang 并发编程里&#xff0c;经常会听到一句话&#xff1a;不要通过共享内存进行通信&#xff0c;通过通信来共享内存。下面我们会介绍下channel, 通过源码的方式去了解channel是怎么工作的。 基本结构 流程图 代码解读 type hchan struct {qcount uint // …

Qt(三):udp组播的发送与接收

1. 创建UDP套接字 使用QUdpSocket类创建一个UDP套接字。 udpSendnew QUdpSocket(this);udpRecenew QUdpSocket(this); 2. 绑定套接字 绑定套接字到一个本地地址和端口。可以使用bind()函数来完成。 如果要在组播中发送数据&#xff0c;可以将套接字绑定到一个通配符地址&#…

Ubuntu安全重启方法

装Ubuntu系统时&#xff0c;经常会遇到各种各样的问题导致系统崩溃、卡死、黑屏等情况&#xff0c;新手或者小白可能直接选择长按电源键强制重启了 建议不要长按电源强制重启&#xff0c;很有可能会损坏磁盘文件&#xff0c;如果硬重启的时候&#xff0c;硬件还在读写数据的话&…

uniapp中uview组件丰富的Code 验证码输入框的使用方法

目录 基本使用 #自定义提示语 #保持倒计时 API #Props #Methods #Event 基本使用 通过ref获取组件对象&#xff0c;再执行后面的操作&#xff0c;见下方示例。 通过seconds设置需要倒计的秒数(默认60)通过ref调用组件内部的start方法&#xff0c;开始倒计时通过监听cha…

智慧旅游手机APP开发解决方案

我国的旅游市场已经逐渐地走向饱和&#xff0c;想要发展&#xff0c;就必须要寻求新的发展模式。本项目就是抓住贵州的交通飞速发展的契机&#xff0c;以高速为主线&#xff0c;高速周边的景点、酒店为依托&#xff0c;高速维修为辅线&#xff0c;借助今天得到广泛应用的智能移…

SpringBoot整合多数据源,并支持动态新增与切换

SpringBoot整合多数据源&#xff0c;并支持动态新增与切换 一、概述 在项目的开发过程中&#xff0c;遇到了需要从数据库中动态查询新的数据源信息并切换到该数据源做相应的查询操作&#xff0c;这样就产生了动态切换数据源的场景。为了能够灵活地指定具体的数据库&#xff0…

【深度学习:SENet】信道注意力和挤压激励网络(SENet):图像识别的新突破

【深度学习&#xff1a;SENet】信道注意力和挤压激励网络&#xff08;SENet&#xff09;&#xff1a;图像识别的新突破 为什么有效如何实现工作原理应用案例 挤压和激励网络&#xff08;SENets&#xff09;为卷积神经网络&#xff08;CNN&#xff09;引入了一个新的构建模块&am…

2024年1月1日答案

a)i. V B B V C C 16 V V_{BB} V_{CC} 16V VBB​VCC​16V R t h R B R E R B R E 10 k Ω 3 k Ω 10 k Ω 3 k Ω ≈ 2.31 k Ω R_{th} \frac{R_B \times R_E}{R_B R_E} \frac{10k\Omega \times 3k\Omega}{10k\Omega 3k\Omega} \approx 2.31k\Omega Rth​RB​R…

Web网页开发-盒模型-笔记

1.CSS的三种显示方式 (1)块级元素:标签所占区域默认为一行 特点&#xff1a;一行一个 可设宽高 (2)行内元素&#xff1a;标签所占区域由内容顶开&#xff0c;行内元素无法使用text-align 特点&#xff1a;一行多个 不可设宽高&#xff0c;margin上下和padding上下都不能改变位…

克服幻觉:提升语言模型在自然语言处理中的准确性与可靠性

随着语言模型&#xff08;LLM&#xff09;在自然语言处理&#xff08;NLP&#xff09;中的应用日益普及&#xff0c;它们在文本生成、机器翻译、情感分析等许多任务中展现出惊人的能力。然而&#xff0c;这些模型也常常显示出一个被称作“幻觉”&#xff08;hallucination&…