冒泡排序

贵阳这个地方的天气变化好大呀,前两天晒大太阳,今天就冷的脚抖,简直不要太冷,但是不管怎么样,还是要学习的哟!

冬天来了,春天确实还有一点远!

 好了,话不多说,我们来开始今天的学习。今天我们来讲冒泡排序,什么是冒泡排序呢?

冒泡排序是一种基本的排序算法,其思想是通过比较两个相邻元素的大小,将较大的元素逐渐交换到数组的最末尾。

1. 从数组的第一个元素开始,将其与相邻的元素进行比较。
2. 如果当前元素大于相邻元素,则交换它们的位置,将较大的元素移动到后面。
3. 继续比较与下一个元素,直到达到数组的末尾。
4. 重复以上步骤,每次比较的次数减少一次。
5. 重复执行上述步骤,直到所有元素都按照从小到大的顺序排序。

 那么我们现在来看看整体代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

void BubbleSort(int arr[], int sz)
{
	
	for (int i = 0; i < sz-1; i++)//趟数
	{
		
		for (int j = 0; j < sz - 1 - i; j++)//一趟冒泡排序
		{
			
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
				
			}
		}
		
	}
}

int main()
{
	int arr[] = { 5,7,9,4,3,6,8,1};//5 7 9 4 3 6 8 1
	int sz = sizeof(arr) / sizeof(arr[0]);//计算有多少个元素
	BubbleSort(arr,sz);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}


	return 0;
}

看看运行效果:

 那么如果是以 9 1 3 4 5 6 7 8这样排序呢,我们是不是也还要进行那么多次的排序,我们是不是只用一趟排序之后就是我们希望看见的结果了,所以我们来改进一下我们的代码。我们假设flag = 1为最终排好的效果,如果进行交换了,我们就把 flag = 0,表示此时还不是我们想要的效果,还可以定义一个count来看看我们进行了多少次比较。

int count = 0;

void BubbleSort(int arr[], int sz)
{
	
	for (int i = 0; i < sz; i++)//趟数
	{
		//int flag = 1;
		for (int j = 0; j < sz - 1 - i; j++)//一趟冒泡排序
		{
			count++;
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
				//flag = 0;
			}
		}
		/*if (flag == 1)
		{
			break;
		}*/
	}
}

int main()
{
	int arr[] = {9,1,3,4,5,6,7,8, };//5 7 9 4 3 6 8 1
	int sz = sizeof(arr) / sizeof(arr[0]);
	BubbleSort(arr,sz);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("%d", count);

	return 0;
}

我们先把flag摒弃掉,看看总共比较了多少次:

 加上flag的判断后看看:

 可能有一些小伙伴有些疑惑了,为什么count放在比较的外面,而不放在if的里面,不是说比较了才加加吗?其实就是放在这里的,每一次进来都是要进行比较的,假设你上一次达到了你想要的排序,但是下一次进来还是要进行比较呀,看看要不要进行交换,如果不用交换的话,那么flag就不用变成0了,那么就可以执行到后面然后跳出循环!

好了,今天就到此结束咯!

Good night!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux_day03

1、复习 遇到虚拟机异常退出&#xff0c;会生成配置文件&#xff0c;不确定文件以后是不是还要用的情况下&#xff0c;先改文件名&#xff0c;再启动虚拟机&#xff1b; 2、磁盘相关命令&#xff1a; df&#xff08;disk full&#xff09;&#xff1a;查看磁盘整体状况 -h &…

ztree结合hmap使用经验分享

项目背景 在建德封控拦截系统&#xff08;Vue3antd2.x&#xff09;为追求更快的地图初始化体验&#xff0c;在尝试了hmap2.5.0版本以及2.6.3版本后&#xff0c;由于这两个版本在现场电脑的初始化速度不够流畅&#xff0c;最终使用的是hmap2.1.3版本。同时由于布控选设备&#…

2023年【起重机械指挥】考试试卷及起重机械指挥操作证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年起重机械指挥考试试卷为正在备考起重机械指挥操作证的学员准备的理论考试专题&#xff0c;每个月更新的起重机械指挥操作证考试祝您顺利通过起重机械指挥考试。 1、【多选题】《中华人民共和国特种设备安全法》…

在CMake中打印日志信息

message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...) (无) &#xff1a;重要消息 STATUS &#xff1a;非重要消息 WARNING&#xff1a;CMake 警告, 会继续执行 AUTHOR_WARNING&#xff1a;CMake 警告 (dev), 会继续执行 SEN…

【hacker送书第一期】嵌入式虚拟化技术与应用

第一期图书推荐 前言为什么嵌入式系统需要虚拟化技术&#xff1f;专家推荐本书适用群体内容简介目录权威作者团队参与方式 前言 随着物联网设备的爆炸式增长和万物互联应用的快速发展&#xff0c;虚拟化技术在嵌入式系统上受到了业界越来越多的关注、重视和实际应用。嵌入式系…

云端部署ChatGLM-6B

大模型这里更新是挺快的&#xff0c;我参考的视频教程就和我这个稍微有些不一样&#xff0c;这距离教程发布只过去4天而已… 不过基本操作也差不多 AutoDL算力云&#xff1a;https://www.autodl.com/home ChatGLM3&#xff1a;https://github.com/THUDM/ChatGLM3/tree/main Hug…

消息队列之初识Rabbit及安装

文章目录 一、MQ的相关概念1.什么是MQ&#xff1f;2.为什么要用MQ2.1流量消峰2.2应用解耦2.3异步处理 3.MQ 的分类3.1.ActiveMQ3.2.Kafka3.3.RocketMQ3.4.RabbitMQ 4.MQ 的选择4.1.Kafka4.2.RocketMQ4.3.RabbitMQ 二、RabbitMQ的相关概念1.四大核心概念2.RabbitMQ 核心部分3.Ra…

OpenMMlab导出yolov3的onnx模型并推理

手动导出 直接使用脚本 import torch from mmdet.apis import init_detector, inference_detectorconfig_file ./configs/yolo/yolov3_mobilenetv2_8xb24-ms-416-300e_coco.py checkpoint_file yolov3_mobilenetv2_mstrain-416_300e_coco_20210718_010823-f68a07b3.pth mod…

数据结构-堆和二叉树

目录 1.树的概念及结构 1.1 树的相关概念 1.2 树的概念 1.3 树的表示 1.4 树在实际中的应用&#xff08;表示文件系统的目录树结构&#xff09; 2.二叉树的概念及结构 2.1 概念 2.2 特殊的二叉树 2.3 二叉树的存储 3.堆的概念及结构 4.堆的实现 初始化堆 堆的插入…

仿写知乎日报第四周

本周主要修改了以往的一些bug&#xff0c;实现了一些遗漏的新功能。 无限右滑 无限右滑我听了学长的思路&#xff0c;首先在scrollView的画布大小设置多一个宽度的画布&#xff0c;然后每当滑到那个画布的时候&#xff0c;就调用一个通知&#xff0c;该通知会触发在首页的vie…

【 第十三章】软件设计师 之 面向对象程序设计

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 备考资料导航 软考好处&#xff1a;软考的…

有效的字母异位词

给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s “anagram”, t “nagaram” 输出: true 示例 2: 输入: s “rat”, …

k8s笔记资源限制,亲和和性 污点和容忍

镜像下载失败 当宿主机资源不足时&#xff0c;会把pod kill &#xff0c;在其他node 重建 在宿主机放可能多的资源 requests(请求) limits(限制) 超出百分比 容器 pod namespace级别 pod使用资源过多&#xff0c;导致宿主机资源不足&#xff0c;会导致重建pod cpu 内存限…

【设计原则篇】聊聊单一职责原则

因为是刚开始写软件设计相关的文章&#xff0c;这里先大概介绍下&#xff0c;软件设计相关的知识图谱。大概分类的话&#xff0c; 编程范式 软件设计相关原则 Don’t Repeat Yourself (DRY)Keep It Simple, Stupid(KISS)Program to an interface, not an implementationYou Ai…

深入理解JVM虚拟机第二十四篇:详解JVM当中的动态链接和常量池的作用

大神链接&#xff1a;作者有幸结识技术大神孙哥为好友&#xff0c;获益匪浅。现在把孙哥视频分享给大家。 孙哥链接&#xff1a;孙哥个人主页 作者简介&#xff1a;一个颜值99分&#xff0c;只比孙哥差一点的程序员 本专栏简介&#xff1a;话不多说&#xff0c;让我们一起干翻J…

STM32 寄存器配置笔记——GPIO配置输出

一、概述 本文主要介绍GPIO 作为输出时的寄存器配置。包括时钟配置&#xff0c;输出模式配置。以STM32F10xxx系列为例&#xff0c;配置PA8、PD2端口作为输出&#xff0c;输出高/低电平。 二、配置流程 1&#xff09;GPIO外设时钟 通过查找STM32F10xxx中文参考手册得知&#xf…

Vant 移动端UI 组件自动引入

Vue项目中安装Vant # Vue 3 项目&#xff0c;安装最新版 Vant npm i vant 组件按需引入配置 Vant按需引入- - -安装&#xff1a;unplugin-vue-components 插件 unplugin-vue-components 插件可以在Vue文件中自动引入组件&#xff08;包括项目自身的组件和各种组件库中的组件&…

“总线仲裁”——以CAN总线为例

总线仲裁 1.什么是总线仲裁2.为什么要总线仲裁3.怎么进行总线仲裁&#xff08;总线仲裁机制&#xff09;3.1 如何确定冲突3.1.1 确定冲突前提3.1.2 同时冲突3.1.3 延时冲突 3.2 冲裁逻辑3.2.1 避免延时冲突3.2.1 避免同时冲突 1.什么是总线仲裁 提到总线仲裁的概念&#xff0c…

设计模式1

![在这里插入图片描述](https://img-blog.csdnimg.cn/c9fbecf1ae89436095885722380ea460.png)一、设计模式分类&#xff1a; 1、创建型模式&#xff1a;创建与使用分离&#xff0c;单例、原型、工厂、抽象、建造者。 2、结构型模式&#xff1a;用于描述如何将对象按某种更大的…

SpringBoot 自动配置原理

SpringBoot 自动配置原理 注: 本文使用的springboot版本为 2.7.11 1、SpringBootApplication 字面分析&#xff0c;这个注解是标注一个Spring Boot应用。 Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Inherited SpringBootConfiguration En…