C语言-冒泡排序算法

PTA 基础编程题目集 7-27 冒泡法排序 C语言 PTA 基础编程题目集 7-27 冒泡法排序 C语言 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。 本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。 输入格式: 输入在第1行中给出N和K(1≤K<N≤100),在第2行中给出N个待排序的整数,数字间以空 阅读详情

冒泡排序

要求

输入n个整数,将它们从小到大排序后输出,要求使用冒泡排序算法。

示例源代码

/*冒泡排序算法*/
#include <stdio.h>
void bubble(int a[], int n);

int main()
{
	int n, a[8];
	int i;

	printf("Enter n (n<=8) :");
	scanf("%d", &n);
	printf("Enter a[%d]:", n);
	for (i = 0; i < n; i++)
		scanf("%d", &a[i]);
	bubble(a, n);
	printf("After sorted, a[%d] = ", n);
	for (i = 0; i < n; i++)
		printf("%3d", a[i]);
	return 0;
}

void bubble(int a[], int n) 		//n是数组a中待排序元素的数量
{
	int i, j, t;
	for (i = 1; i < n; i++)			//外部循环
		for (j = 0; j < n - 1; j++) //内部循环
			if (a[j] > a[j + 1])	//比较两个元素的大小
			{
				//如果前一个元素大,则交换
				t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
}

运行结果

Enter n (n<=8) :8

Enter a[8]:7 3 66 3 -5 22 -77 2

After sorted, a[8] = -77 -5 2 3 3 7 22 66

算法分析

对于搜索大型数据库来说,对数据进行排序的算法是至关重要的。用词典来查找字词是相对容易和方便的,这是因为词典按字母表顺序排了序。排序(sort)是一种非常有助于解决查找问题的技术,此外,如何有效的排序本身就是计算机算法的一个重要研究领域。
之所以叫做冒泡排序,是因为在进行从小到大排序时,小的数经过交换会慢慢从底下“冒”上来。冒泡排序效率不高,这是因为他需要约$\frac{n^2}{2} $次比较。然而对一些小数组来说,它的性能通常还是可以接受的。对于数组a,假定输入后值为{7, 3, 66, 3, -5, 22, -77, 2},再调用bubble(a,8)。下表给出了在每次外部循环后数组a中的元素。

a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]
未排序的数据73663-522-772
第1遍373-522-77266
第2遍33-57-7722266
第3遍3-53-77272266
第4遍-53-772372266
第5遍-5-7723372266
第6遍-77-523372266
第7遍-77-523372266

在第一次循环的开始处,把a[0]与a[1]比较,由于它们不符合次序要求,对它们要做交换;然后把a[1]与a[2]比较,由于它们符合次序要求,对他们不做交换;再把a[2]与a[3]比较,依此类推。若邻接元素不符合次序要求,则要求对它们进行交换。第一次循环的效果是把数组中的最大元素“冒泡”到a[7]。在第二次循环后,不再检查a[7],即不再改变它,把a[0]再与a[1]比较,如此等等。在第二次循环后,第二大的数存放在a[6]中。由于每次循环都把当前最大的元素放在数组的合适位置,在n-1次循环后,算法就完成了所有元素的排序。

排序是程序算法中非常有挑战意义的,这里给出的冒泡排序和选择排序法(\C_Learning\排序\选择排序\选择排序.md)从效率上讲都不是很高,实际需要的排序时间也很长,特别是在数据量很大的情况下更是耗费时间。请读者改进冒泡排序算法,以提高算法的效率,这也有助于进一步理解程序设计算法以及指针和数组的使用。

摘自高等教育出版社《C语言程序设计(第3版)》(何钦铭,颜晖主编)

冒泡排序算法C语言实现 冒泡排序 阅读详情

相关推荐

C语言实现冒泡排序算法的动态展示

学习C语言有几天了,第一个分享程序:实现冒泡排序算法原理的简单动画展示,动画原理是最简单的清屏重绘。环境是WIN764,EGE库,CODEBLOCK 13.12。欢迎大神指正,能接受轻拍,很基础的东西,也能接受伸手党。我的CODEBLOCK是英文版,我的英文又很菜,所以没写注释。。。。直接上代码了:#include &lt;graphics.h&gt;#include &lt;stdio.h&gt...

weixin_42122779的博客 3081

输入n个整数,用冒泡排序法进行由小到大排序,然后输出

成功=艰苦劳动+正确方法+少说空话

y2184107562的博客 3356

C语言入门算法丨冒泡排序算法详解,绝不摆烂。

冒泡排序是所有排序算法中最简单、最易实现的算法,有时也称为起泡排序算法。 使用冒泡排序算法对 n 个数据进行排序,实现思路是:从待排序序列中找出一个最大值或最小值,这样的操作执行 n-1 次,最终就可以得到一个有序序列。 举个例子,对 {14, 33, 27, 35, 10} 序列进行升序排序(由小到大排序),冒泡排序算法的实现过程是: ● 从 {14, 33, 27, 35, 10} 中找到最大值 35; ● 从 {14,33,27,10} 中找到最大值 33; ● 从 ...

HUYA69的博客 1315

输入一个正整数n,再输入n个整数,用选择法或冒泡法对n个整数进行从小到大排序...

这是一个排序算法问题。两种常见的排序方法是选择排序和冒泡排序。 选择排序的基本思想是:首先在未排序的数列中找到最小(大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 冒泡排序的基本思想是:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后...

weixin_42602726的博客 4579

C语言实现冒泡排序算法详细解析

本文还有配套的精品资源,点击获取 简介:冒泡排序是基础且经典的排序算法,通过反复交换相邻元素使较大元素“浮”至末尾。本文深入剖析冒泡排序原理,并以C语言程序为实例展示如何通过两层嵌套循环、比较与交换操作进行数组排序。同时,提供了优化冒泡排序的方法,并通过代码示例展示了排序过程,验证排序效果。尽管冒泡排序效率相对较低,但它简单易学,适合初学者学习排序算法基础。 1....

weixin_32445049的博客 2623

【论文阅读1】机理引导的残差学习用于电池全生命周期状态监测 | Nature Communications

本文提出了一种机理引导的残差学习框架,用于提升电池全生命周期内荷电状态(SOC)和健康状态(SOH)的监测精度。该方法融合等效电路模型的先验知识与机器学习,设计了修正模型和补偿模型两种通用框架。实验验证表明,该方法在三种不同类型电池数据集上均表现出色,SOC和SOH估计误差较传统方法降低50%以上,且在未见工况下仍保持良好外推能力。模型具有强鲁棒性,在减少训练数据量和降低采样频率时性能稳定,并兼具物理可解释性。该框架无需离线测试和运行中校准,为电池安全监测提供了有效解决方案。

qq_21843433的博客 615

输入n个整数,使用冒泡排序算法按从小到大排序,然后输出结果。

输入: 第一行是1个整数n(n<100),表示随后有n个整数,第二行有n个整数,空格隔开。 输出: 输出一共为n-1行,每行为每趟排序的结果。 代码: chang=int(input("")) num=input("") arr = [int(n) for n in num.split()] for i in range(chang-1): for j in range(1,chang): if arr[j-1]>arr[j]: arr[j -

qq_42479987的博客 1万+

Depth Anything 3实战:如何用DINOv2 Transformer一键生成3D高斯点云?

本文详细介绍了Depth Anything 3(DA3)模型如何利用DINOv2 Transformer架构,实现从单张或多视角图像一键生成高质量3D高斯点云。DA3通过统一的深度-射线表示和自适应注意力机制,简化了传统复杂的3D重建流程,并可直接微调用于3D高斯渲染,为图形学、CV和内容创作领域提供了高效的端到端解决方案。

postgres8guard的博客 722

(冒泡排序)对n个整数排序并从小到大排序输出

冒泡排序

2301_76882229的博客 3650

Hi3516CV610硬件设计避坑指南:从电源模块到DDR布线实战解析

本文深入解析了Hi3516CV610硬件设计中的关键难点与实战技巧。重点剖析了电源架构的选型陷阱与PCB布局要点,详细阐述了DDR3/L高速布线的等长匹配、信号完整性及端接策略,并提供了MIPI接口与时钟电路的隔离设计指南。旨在帮助工程师规避常见设计错误,提升系统稳定性与可靠性。

ooo22的博客 255

别再盲调PID了!手把手教你用VOFA+实时可视化电机速度曲线(附STM32F4源码)

本文详细介绍了如何使用VOFA+工具实现PID参数的可视化调试,帮助开发者从盲调转向精准调优。通过实时可视化电机速度曲线,结合STM32F4源码示例,展示了如何高效调试Kp、Ki、Kd参数,解决响应慢、超调等常见问题,大幅提升电机控制系统的性能。

weixin_28366475的博客 128

C语言冒泡排序算法及代码

C语言冒泡排序算法及代码 冒泡排序是排序算法的一种,思路清晰,代码简洁,常被用在大学生计算机课程中。 “冒泡”这个名字的由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。 这里以从小到大排序为例进行讲解。 基本思想及举例说明 冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较,就选出最大的数;经过第2轮比较,就选出次大的数,以此类推。 下面以对 3 2 ...

weixin_39658178的博客 3万+

2小时用Trae搭建全功能CMS系统

在前文中,我们使用Trae从零搭建了一个用户文档站点,仅用不到2小时就实现了用户注册登录和文档的增删改查功能,且无需编写任何代码。本节我们将在此基础上,构建一个CMS后台管理系统,包含用户管理和文档管理两大功能模块。

2501_92019101的博客 540

C语言算法——实现冒泡排序

C语言算法——排序算法1、冒泡排序2、插入排序3、选择排序 1、冒泡排序 #include <stdio.h> int main ( ) { //冒泡排序 int a[]={3,2,6,4,8,9,1,0,3,5,7,1}; int len=sizeof(a)/sizeof(int);//求出数组中元素的个数 // printf("%d\n",len); int i=0,j; for (; i<len-1; i++) { //n个元素进行冒泡排

hey,欢迎浏览我的博客,希望能给你提供帮助。 4万+

华为OD机试真题2025双机位A卷 C语言 实现【采购订单】

在一个采购系统中,采购申请(PR)需要经过审批后才能生成采购订单(PO)。每个PR包含商品的单价(假设相同商品的单价一定是一样的)及数量信息。系统要求对商品进行分类处理:单价高于100元的商品需要单独处理,单价低于或等于100元的相同商品可以合并到同一采购订单PO中。针对单价低于100的小额订单,如果量大可以打折购买。

MISAYAONE的博客 351

unity从3D升级到urp管线,打包ab包后,材质全部变紫色

确保材质中的被转换为 URP 兼容的着色器。在打包 AssetBundle 时,确保所需的着色器被正确打包。确保运行 AB 包的目标项目中正确配置了 URP 渲染管线。如果加载后材质丢失,检查 AB 包的加载逻辑,确保材质正确应用了着色器。通过这些步骤,你应该能够解决从标准渲染管线切换到 URP 渲染管线后,材质在 AB 包中变紫色的问题。如果问题仍然存在,请根据具体错误日志进一步排查。希望如上措施及解决方案能够帮到有需要的你。

**My Coding Family** 1962

冒泡排序算法详解之C语言版

冒泡排序是一种常用的排序算法,属于稳定排序法,其时间复杂度为O(n^2)。 冒泡排序法的原理就是从前向后依次比较相邻两个元素的大小,大元素后沉,类似于水中的泡泡逐步上浮的过程,随着泡泡逐渐接近水面,水中压强逐渐减小,水泡体积逐渐增大,因此成为冒泡排序。

sunnyoldboy博客 5万+

TC8:SOMEIPSRV_SD_MESSAGE_07-09

TTL为服务实例的生命周期。在此生命周期之后,不提供服务实例。

jasonj333 908

冒泡排序算法,C语言冒泡排序算法详解

冒泡排序是最简单的排序方法,理解起来容易。虽然它的计算步骤比较多,不是最快的,但它是最基本的,初学者一定要掌握。 冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。 以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。 比如对下面这个序列进行从小到大排序: 90 21 132 -58 34 第一轮:

小黑的博客 4万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

c语言 冒泡排序算法

冒泡排序是排序算法的一种,思路清晰,代码简洁,常被用在大学生计算机课程中。 “冒泡”这个名字的由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。 这里以从小到大排序为例进行讲解。 基本思想及举例说明 冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较,就选出最大的数;经过第2轮比较,就选出次大的数,以此类推。 下面以对 3  2  4

u010173075的专栏 4652

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

基于C语言的冒泡排序算法

冒泡排序的基本思想及c语言的实现

m0_71974552的博客 1531

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C语言冒泡排序算法详解

冒泡排序是最简单的排序方法,理解起来容易。虽然它的计算步骤比较多,不是最快的,但它是最基本的,初学者一定要掌握。 冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。 以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。 比如对下面这个序列进行从小到大排序: ...

唐攀的博客 1110

C语言冒泡排序算法

冒泡排序的概念:冒泡排序(Bubble Sort)是一种简单的交换排序,它是通过两两比较相邻记录的关键字,如果发生逆序就进行交换,从而使关键字小的记录如气泡一般逐渐往上“漂浮”(左移),或者使关键字大的记录如石块一样向下“坠落”(右移)。 冒泡排序的思想:就是将关键字进行两两比较,如果发生逆序就进行交换。 冒泡排序的思路过程:例如将49,38,65,97,76,13,27,49进行冒泡排序 初始化...

mfx7700429的博客 8212

冒泡排序及其改进算法C语言实现

#include #include //冒泡排序 void BubbleSort(int *array,int n) { int temp; for (int i=n-1;i>0;i--) { for (int j=0;j<i;j++) { if (*(array+j)>*(array+j+1)) { temp=*(array+j)

大道至简 2328

冒泡排序算法之C语言实现

冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序。...

Stayhungry,Stayfoolish. 7015

图解C语言冒泡排序算法,含代码分析

C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分析 VS2019编写简单的C程序示例 简单示例,VS2019调试C语言程序 C语言基础-基本算法 C语言基础-数据类型 C语言中的输入输出函数 C语言流程控制语句 C语言数组——一维数组 C语言数组——二维数组 C语言数组——字符数组 C语言中常用的6个字符串处理函数 精心收集了60个C语言项目源码,分享给大家

专注于C语言编程干货分享 2639
上一篇: C语言-选择排序算法
下一篇: 在Win10 PC上安装Ubuntu 20.04 系统
爱编程的小芯
博客等级 码龄6年 183粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值