C语言数组基础算法冒泡排序快速解答

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

一、冒泡排序是什么

冒泡排序是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了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值