提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、冒泡排序是什么
冒泡排序是c语言中对一连串无序数据进行一个有序排列的常见算法,通过相邻元素两两比较,若顺序不对,则交换两个元素的值,否则不交换,从而对无序数组元素进行一个重排列。
二、代码演示
代码如下(示例):
#include<stdio.h>
int main()
{
int arr[] = { 3,5,2,1,4 };
int len = sizeof(arr) / sizeof(int);
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len-1-i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
接下来对代码主体部分进行一个详解
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len-1-i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
这一部分进行了一个函数嵌套,首先对内层for循环进行一个解释:
内层for循环中,if语句的内容就是进行一个两两比较,倘如前一个数比后一个数的值大,则交换两者的值,大家疑惑的点可能在for循环的条件里。
j<len-1-i
要对这个条件进行解答,我们先抛开-i不谈,先谈len-1,是因为我们现在数组的长度为5,若不-1,当j=4时,就会出现arr[4]与arr[5]进行比较,代码就会报错,接下来谈-i的问题,我们第一次执行内层循环时,原数组顺序为3 5 2 1 4中,
第一次排序:3 5 1 2 4
第二次排序:3 1 5 2 4
第三次排序:3 1 2 5 4
第四次排序:3 1 2 4 5
也就是说当外循环中i=0时,我们执行了4次内循环代码,也就是j<len-1-0次便找到了最大值
接下来当i=1时,
第一次排序:1 3 2 4 5
第二次排序:1 2 3 4 5
第三次排序:1 2 3 4 5
我们可以看到仅用3次就找到了次最大值,而我们的内循环执行了三次,即j<len-1-1,继续接下里的步骤我们会发现,内循环分别会执行两次,一次,即j<len-1-2,j<len-1-3以至于最终的j<len-1-4,从而完成对数据的正序排列,这就解释了内循环中j<len-1-i的回答。
总结
下面是对冒泡排序的一个小小的总结,若本文有不妥之处,欢迎各位评论区随时提出,虚心接受建议。
1.冒泡排序简单的说就是相邻的元素两两比较,大的放右边,小的放左边。
2.第一轮比较完毕之后,最大值就已经确定,第二轮可以少循环一次,后面以此类推。
3.如果数组中有n个数据,我们只需执行n-1轮代码就ok了。