C语言之冒泡排序
Posted 优质Space
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言之冒泡排序相关的知识,希望对你有一定的参考价值。
在实际开发中,有很多场景需要我们将数组元素按照从大到小(或者从小到大)的顺序排列,这样在查阅数据时会更加直观,例如:
一个保存了班级学号的数组,排序后更容易分区好学生和坏学生;
一个保存了商品单价的数组,排序后更容易看出它们的性价比。
对数组元素进行排序的方法有很多种,比如冒泡排序、归并排序、选择排序、插入排序、快速排序等,其中最经典
最需要掌握的是「冒泡排序」。
以从小到大排序为例,冒泡排序的整体思想是这样的:
从数组头部开始,不断比较相邻的两个元素的大小,让较大的元素逐渐往后移动(交换两个元素的值),直到数组的末尾。经过第一轮的比较,就可以找到最大的元素,并将它移动到最后一个位置。
第一轮结束后,继续第二轮。仍然从数组头部开始比较,让较大的元素逐渐往后移动,直到数组的倒数第二个元素为止。经过第二轮的比较,就可以找到次大的元素,并将它放到倒数第二个位置。
以此类推,进行 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<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语言之冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章