原标题: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;

}



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

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

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

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

责任编辑:

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

  1. JavaScript求数组中每个元素的个数,如数组str = [1,2,3,2,4,1,2]中元素2的个数为2。要求:使用对象知识来实现,输出结果为对象,对象包含数组元素和个数值。

    求数组中每个元素的个数,如数组str = [1,2,3,2,4,1,2]中元素2的个数为2. 要求:使用对象知识来实现,输出结果为对象,对象包含数组元素和个数值. <script>var ...

  2. 删除数组中指定元素_如何删除PHP数组元素键值并重新排序

    点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网      源 / www.php.cn 想要删除PHP数组中某个元素键值,然后重新规范索引排序.我们可以使用PHP中的内置函数uns ...

  3. php 比较数组中的元素,php – 比较多维数组中的元素

    说我有一个多维数组.例如: Array ( [0] => Array ( [animal_id] => 5494 [animal_name] => "Suzy" ...

  4. 删除数组中重复元素(C语言)

    编写函数,删除数组中所有的重复元素,使数组变成一个集合,函数返回集合中元素的个数. 书上习题 #include<stdio.h> int set(int a[],int n) {int i ...

  5. java输出数组中的元素_java一行代码输出数组的所有元素内容

    如果要用java把一个数组的元素都输出到控制台的话,你要怎么做呢? 是通过一个循环去循环数组中的各个元素,然后输出吗? 像不像二维数组 今天我要说的是,可以通过一行代码就完成这个工作.是一样什么样的代 ...

  6. 数组中相同元素 java_如何在一维数组中查找某重复元素,并输出其位置?用java实现...

    这种情况适合使用 Map,Map 的键 为 nums 中的整数,值 为 nums 中整数的所有位置 -- 位置数大于 1,那么说明该整数在数组中重复 import java.util.*; publi ...

  7. c++ 返回数组中最大的值_Swift语言必学秘技:数组里面的使用方法

    ​Swift语言必学秘技:数组里面的使用方法 这一期我们来说一下Swift语言里面数组的应用方法. 在Swift语言中,数组中可以放入任何类型的数据.这些数据包括整型,字符串,甚至是对象. 第一部分, ...

  8. php 两个数组中不同的元素,PHP实现查询两个数组中不同元素的方法

    这篇文章主要介绍了PHP实现查询两个数组中不同元素的方法,涉及PHP数组差集运算与数组合并的相关技巧,需要的朋友可以参考下 本文实例讲述了PHP实现查询两个数组中不同元素的方法.分享给大家供大家参考, ...

  9. php删除二维数组元素_php怎样删除二维数组中的元素

    php怎样删除二维数组中的元素 发布时间:2020-11-03 10:22:40 来源:亿速云 阅读:68 作者:小新 这篇文章主要介绍了php怎样删除二维数组中的元素,具有一定借鉴价值,需要的朋友可 ...

最新文章

  1. python __setattr__ , __getattr__
  2. Python知识点5——字典
  3. Connection reset by peer原理解析
  4. window 下生成SSH key
  5. 十年前的网易,新浪,维基百科,百度百科在手机上的打开效果
  6. lamp php5.5,CentOS 5.5快速搭建Apache+PHP5+MySQL完美Web服务器(LAMP)
  7. apache OFBiz的安装
  8. 将ANSYS里的数据导入MATLAB的步骤
  9. c++异步日志队列_Logback 配置文件这么写,日志 TPS 提高 10 倍
  10. 玩转springboot2.x之搭建Thymeleaf官方示例程序
  11. 查看你所使用计算机的网卡信息,查看网卡信息命令
  12. SCOM2012SP1环境准备和安装
  13. 酒店客房管理系统需求分析报告
  14. java定义一个二维数组
  15. modbus tcp主站和从站_实例讲解PLC实现modbus通讯
  16. 做一个自己的PC微信无感免打扰检测僵尸粉死粉的小工具。使用c++ call
  17. laravel对象转数组
  18. 关于CASS点自动连线方法
  19. CSS 权威指南 CSS实战手册 第四版(阅读笔记)
  20. java sha1加密ascii码_MD5,SHA1,SHA256,SHA512等常用加密算法

热门文章

  1. CorelDRAW VBA - 打开选择文件夹对话框
  2. 适配动态 | 2月份SequoiaDB与7款产品完成互认证
  3. 斐波那契数列和青蛙跳台阶问题
  4. STM32学习笔记之Bootloader升级Ymodem协议简介
  5. 支付宝转账(实现用户提现功能)
  6. 打工皇帝刘炽平与他的国:未来的腾讯主人?
  7. c语言 office 二级成绩查询,2019年9月辽宁计算机二级考试成绩查询入口
  8. android view ondestroy,Android片段onCreateView在onDestroy之后不再調用。
  9. [可视化]时间线的7种设计方式
  10. SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder