C语言之冒泡排序

Posted 优质Space

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言之冒泡排序相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

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

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

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

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

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

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

第一轮:

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

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

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

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

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

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

第二轮:

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

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

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

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

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

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

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

/*从小到大排列*/

#include<stdio.h>

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语言之冒泡排序

C语言之冒泡排序

一起来学C语言———C语言之冒泡排序和选择排序

C语言之冒泡排序

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

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