c语言比较数组中的元素大小,C语言之数组的冒泡排序

本文详细介绍了如何使用C语言实现数组的冒泡排序。通过具体实例解释了冒泡排序的基本原理,即通过不断地比较和交换相邻元素的位置,最终使数组按从小到大的顺序排列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原标题:C语言之数组的冒泡排序

在实际开发中,有很多场景需要我们将数组元素按照从大到小(或者从小到大)的顺序排列,这样在查阅数据时会更加直观,例如:

l 一个保存了班级学号的数组,排序后更容易分区好学生和坏学生;

l 一个保存了商品单价的数组,排序后更容易看出它们的性价比。

对数组元素进行排序的方法有很多种,比如冒泡排序、归并排序、选择排序、插入排序、快速排序等,其中最经典

最需要掌握的是「冒泡排序」。

以从小到大排序为例,冒泡排序的整体思想是这样的:

l 从数组头部开始,不断比较相邻的两个元素的大小,让较大的元素逐渐往后移动(交换两个元素的值),直到数组的末尾。经过第一轮的比较,就可以找到最大的元素,并将它移动到最后一个位置。

l 第一轮结束后,继续第二轮。仍然从数组头部开始比较,让较大的元素逐渐往后移动,直到数组的倒数第二个元素为止。经过第二轮的比较,就可以找到次大的元素,并将它放到倒数第二个位置。

l 以此类推,进行 n-1(n 为数组长度)轮“冒泡”后,就可以将所有的元素都排列好。

整个排序过程就好像气泡不断从水里冒出来,最大的先出来,次大的第二出来,最小的最后出来,所以将这种排序方式称为冒泡排序。

从以上的过程来看冒泡排序需要用循环来控制,并且还需要两层循环,一层循环用来控制比较的轮数,一层循环用来控制数组元素的比较。

下面我们以“53412”为例对冒泡排序进行说明。

第一轮:

从第一个元素开始,往后两两排序,数较大的往后去。

53比较:5大于3,5往后移;35412;

54比较:5大于4,5往后移;34512;

51比较:5大于1,5往后移;34152;

52比较:5大于2,5往后移;34125;

第一轮结束,此时数组中的最大的数已经比较出来了。

第二轮:

还是在数组的第一个元素开始,往后比较。

34比较:3小于4,4不用后移;34125;

41比较:4大于1,4往后移;31425;

42比较:4大于2,4往后移;31245;

45比较:4小于5,4不用往后移;31245;

第三轮开始,依次往后比较,这里请大家自己演示。

我们来看看这个例子的运行效果:

/*从小到大排列*/

#include

int main()

{

int a[5], i, j,max;//i控制数组元素的下标,j控制的是轮数

printf("请输入数组:\n");

for (i = 0; i < 5; i++)//这层循环控制的是数组的输入

{

scanf_s("%d", &a[i]);

}

for (j = 1; j < 5; j++)

{

for (i = 0; i < 4; i++)

{

if (a[i] > a[i + 1])//比较出最大的数

{

max = a[i];

a[i] = a[i + 1];

a[i + 1] = max;

}

}

}

for (i = 0; i < 5; i++)//数组的输出

{

printf("%d\t", a[i]);

}

return 0;

}

4b2bcf7857ed63816757ec77d569c1ed.png



在这里需要注意的有几点:

第一点:数组有多长,控制趟数的变量(文中是j),就要小于那个长度。

第二点:控制数组元素比较的变量(文中是i),要小于用(数组的长度减去1)。

好了今天的冒泡排序你学会了吗?返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值