C语言——冒泡排序

一、冒泡排序是什么

冒泡排序:

      冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序。升序时:它会遍历若干次需要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾! 采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前。重复此操作,直到整个数列都有序为止!降序反之。

二、图文解释

冒泡排序的核心就是要知道他是两两比较的, 还有他需要完成几趟,每趟需要两两比较多少次?

由图可知:

       当我们升序排列时,如果我们有sz个元素,每完成一趟,最大的元素就会排列在最后。当我们完成最后一趟的时候,前面两个元素会同时完成排列。由此可知,在最坏的情况下,我们需完成sz-1趟所有的元素都会完成排列。

那每趟需要两两比较几次呢?

第一趟的时候:需要sz-1次

第二趟的时候:因为最后一个元素已经不需要参加比较了,所有只有sz-1个元素参拍,那么就需要sz-1-1次

第三趟的时候:因为最后两个元素已经不需要参加比较了,所有只有sz-2个元素参拍,那么就需要sz-2-1次

所以我们得出:

for (int i = 0; i < sz - 1; i++)//确定趟数
{
	for(int j=0;j<sz-1-i;j++)//确定每趟需要两两比较的次数
}

三、代码演示

现在我们原理以及搞清楚了,接下来看代码展示:

#include<stdio.h>
void Bubble_sort(int arr[], int size)
{
	int j, i, tem;
	for (i = 0; i < size - 1; i++)//size-1是因为不用与自己比较,所以比的数就少一个
	{
		for (j = 0; j < size - 1 - i; j++)	//size-1-i是因为每一趟就会少一个数比较
		{
			if (arr[j] > arr[j + 1])//这是升序排法,前一个数和后一个数比较,如果前数大则与后一个数换位置
			{
				tem = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tem;
			}
		}
	}

}
int main()
{
	int arr[10];
	int i;

	printf("请输入10个数\n");
	for (i = 0; i < 10; i++)		//接收用户的数值
	{
		scanf("%d", &arr[i]);
	}
	printf("排序前的数组>");
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}

	printf("\n排序后的数组>");
	Bubble_sort(arr, 10);
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

但是我们这个代码有个缺陷,就是如果某一趟以及完成了所有排列,但是程序还是会继续执行,完成所有趟数,这就显得有些浪费时间了 。

所以我们可以添加一句赋值语句,如果某趟执行完之后,发现这个赋值语句的变量没有发生改变,我们则认为这个排序以及完成了,就可以退出循环。

代码展示如下:

#include<stdio.h>
void Bubble_sort(int arr[], int size)
{
	int j, i, tem;
	for (i = 0; i < size - 1; i++)//size-1是因为不用与自己比较,所以比的数就少一个
	{
		int flag = 1;//我们假设这个数组已经有序
		for (j = 0; j < size - 1 - i; j++)	//size-1-i是因为每一趟就会少一个数比较
		{
			if (arr[j] > arr[j + 1])//这是升序排法,前一个数和后一个数比较,如果前数大则与后一个数换位置
			{
				tem = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tem;
				flag = 0;//发生排序,改变flag的值,说明还没有拍好序
			}
		}
		if (flag == 1)			//如果某一趟没有交换位置,则说明已经排好序,直接退出循环
			break;
	}

}
int main()
{
	int arr[10];
	int i;

	printf("请输入10个数\n");
	for (i = 0; i < 10; i++)		//接收用户的数值
	{
		scanf("%d", &arr[i]);
	}
	printf("排序前的数组>");
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}

	printf("\n排序后的数组>");
	Bubble_sort(arr, 10);
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}

	return 0;
}

添加一条flag语句来判断数组是否有序,就会为我们节省很多时间。 

总结

        以上就是今天要讲的内容,本文仅仅简单介绍了冒泡排序使用,而冒泡排序思维提供了大量能使我们快速便捷地解决问题的方案。希望大家多多支持。

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

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

相关文章

黔院长 | 何为风邪?

中医上所说的风&#xff0c;也称风邪&#xff0c;是指受到外界侵犯&#xff08;外邪&#xff09;而感得风寒、风热、风湿等症状&#xff0c;导致人的免疫力下降。寒、湿、燥、暑、热等都属于外邪&#xff0c;多依附于风而入侵人体&#xff0c;因此风邪更多的是指一种致病因素。…

pythom导出mysql指定binlog文件

要求 要求本地有py环境和全局环境变量 先测试直接执行binlog命令执行命令 Windows 本地直接执行命令 # E:\output>E:\phpstudy_pro\Extensions\MySQL5.7.26\bin\mysqlbinlog binglog文件地址 # --no-defaults 不限制编码 # -h mysql链接地址 # -u mysql 链接名称 # -p m…

如何制作keil5的Device pack

概述&#xff1a; 作为一名嵌入式芯片相关行业人员&#xff0c;我们经常需要使用到Device pack, 比如STM32的pack如下图所示&#xff1a; 名词DFP&#xff1a; 设备家族包 DFP Pack组成&#xff1a; Boards (板级支持)Device &#xff08;芯片设备级支持&#xff09;Docum…

CI/CD 持续集成与持续交付(1)

git Git git使用 [rootserver1 ~]# yum install -y git [rootserver1 ~]# mkdir demo [rootserver1 ~]# cd demo/初始化版本库 [rootserver1 demo]# git init查看状态 [rootserver1 demo]# git status [rootserver1 demo]# git status -s #简化输出[rootserver1 demo]# echo…

第十一周任务总结

本周任务总结 本周物联网方面主要继续进行网关的二次开发与规则引擎实现设备联动的实现 非物联网方面主要复习了docker的使用与算法的学习 1.网关的二次开发&#xff0c;本周将实现debug调试输出的文件下载到了网关&#xff0c;但网关出了问题无法连接&#xff0c;最终跟客服…

SmartX 超融合 5.1 版本有哪些新特性和技术提升?

近日&#xff0c;SmartX 正式发布了超融合产品组合 SmartX HCI 5.1 版本&#xff0c;以全面升级的超融合软件、分布式块存储、容器管理与服务、软件定义的网络与安全等组件&#xff0c;为虚拟化和容器负载在计算、存储、网络和管理层面提供统一的架构和生产级别的能力支持。本期…

ArcGIS Maps SDK for JS:监听图层的visible属性

文章目录 1 问题描述2 解决方案3 拓展 1 问题描述 近期有这么一个需求。在 ArcGIS Maps SDK for JavaScript 中&#xff0c;使用图层的visible属性同步显示某个组件&#xff0c;即打开图层时显示组件&#xff0c;关闭图层时隐藏组件。 首先想到的是&#xff0c;通过点击图层列…

B站批量取消关注

找到关注页面&#xff1a; 右键检查或者按F12进入开发者界面 然后选console&#xff0c;在页面下面输入下面jQuery代码&#xff0c;然后按回车。复制粘贴两次这一页的博主就能全部取消大概20个 然后刷新页面&#xff0c;接着粘贴两边代码&#xff0c;循环如此即可。 $(".…

kubernetes集群编排——k8s高可用集群

实验环境 主机名 IP 角色 k8s1 192.168.92.11 harbor k8s2 192.168.92.12 control-plane k8s3 192.168.92.13 control-plane k8s4 192.168.92.14 control-plane k8s5 192.168.92.15 haproxy,pacemaker k8s6 192.168.92.16 haproxy,pacemaker k8s7 192.16…

duplicate复制数据库单个数据文件复制失败报错rman-03009 ora-03113

duplicate复制数据库单个数据文件复制失败报错rman-03009 ora-03113 搭建dg过程中&#xff0c;发现有一个数据文件在复制过程中没有复制过来&#xff0c;在备库数据文件目录找不到这个数据文件 处理方法&#xff1a; 第一步&#xff1a;主库备份86#数据文件 C:\Users\Admi…

【0235】修改私有内存(private memory)中的MyBEEntry时,st_changecount值前后变化

上一篇: 【0234】PgBackendStatus 记录当前postgres进程的活动状态 1. pg_stat_activity中xxx实时信息如何实现? 客户端(eg:psql)在连接上postmaster之后,postmaster守护进程会fork()一个后端进场(backend process),之后此客户端的所有操作、交互均有此对应的Backen…

实验七 状态机及键盘输入 chisel

题目 请设计一个区别两种特定时序的有限状态机FSM&#xff1a;该有限状态机有一个输入w和一个输出z。当w是4个连续的0或4个连续的1时&#xff0c;输出z1&#xff0c;否则z0&#xff0c;时序允许重叠。即&#xff1a;若w是连续的5个1时&#xff0c;则在第4个和第5个时钟之后&am…

Qt HTTP 摘要认证(海康球机摄像机ISAPI开发)

接到一个需求是开发下海康的球机,控制云台,给到我的是一个开发手册,当然了是海康的私有协议 ISAPI开发手册https://download.csdn.net/download/qq_37059136/88547425关于开发这块读文档就可以理解了,海康使用的是摘要认证,当然了海康已经给出使用范例 通过libcurl就可以直接连…

nodejs+vue杰和牧场管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计

系统涉及的对象是奶牛。 系统使用员工有管理员和普通员工。 管理员有修改的权限&#xff0c;普通员工没有。系统包含新闻功能&#xff0c;最好是有个后台管理&#xff0c;在后台输入新闻标题和内容&#xff0c;插入图片&#xff0c;在网页上就可以展示。最好再有个轮播图。 新闻…

使用Python进行二维图像的三维重建

2D图像的三维重建是从一组2D图像中创建对象或场景的三维模型的过程。这个技术广泛应用于计算机视觉、机器人技术和虚拟现实等领域。 在本文中&#xff0c;我们将解释如何使用Python执行从2D图像到三维重建的过程。我们将使用TempleRing数据集作为示例&#xff0c;逐步演示这个过…

SpringBoot-集成Kafka详解

SpringBoot集成Kafka 1、构建项目 1.1、引入依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.5.RELEASE</version> </parent> <dependenci…

机器学习第7天:逻辑回归

文章目录 介绍 概率计算 逻辑回归的损失函数 单个实例的成本函数 整个训练集的成本函数 鸢尾花数据集上的逻辑回归 Softmax回归 Softmax回归数学公式 Softmax回归损失函数 调用代码 参数说明 结语 介绍 作用&#xff1a;使用回归算法进行分类任务 思想&#xff1a;…

某60区块链安全之整数溢出漏洞实战学习记录

区块链安全 文章目录 区块链安全整数溢出漏洞实战实验目的实验环境实验工具实验原理攻击过程分析合约源代码漏洞EXP利用 整数溢出漏洞实战 实验目的 学会使用python3的web3模块 学会以太坊整数溢出漏洞分析及利用 实验环境 Ubuntu18.04操作机 实验工具 python3 实验原理…

GEM5 Garnet DVFS / NoC DVFS教程:ruby.clk_domain ruby.voltage_domain

简介 gem5中的 NoC部分是Garnet实现的&#xff0c;但是Garnet并没有单独的时钟域&#xff0c;而是保持ruby一致&#xff0c;要做noc的DVFS&#xff0c;便是要改ruby的 改电压 #这里只是生成一个随便变量名&#xff0c;存一下值。改是和频率一起的 userssaved_voltage_domain…

鸿蒙开发|鸿蒙系统项目开发前的准备工作

文章目录 鸿蒙项目开发的基本流程介绍鸿蒙项目开发和其他项目有什么不同成为华为开发者-注册和实名认证1.登录官方网站 鸿蒙项目开发的基本流程介绍 直接上图&#xff0c;简单易懂&#xff01; 整个项目的开发通过4个模块进行&#xff1a;开发准备、开发应用、运行调试测试和发…