C语言关于冒泡排序的一些简单运用

文章详细解释了冒泡排序的思路,通过举例说明数字的比较和交换过程。接着提供了C语言的代码实现,包括创建数组、计算数组个数、冒泡排序的主要代码以及打印排序后的数组。最后,文章展示了如何接受用户输入并进行排序。
摘要由CSDN通过智能技术生成

目录

文章目录

前言

一、冒泡排序的思路。

二、代码实现

1.创建数组,计算数组的个数

2.创建循环变量,冒泡排序的主要代码

3.打印数组和完整代码

三、以输入的形式进行排序

1.完整代码

总结

 


前言

冒泡排序一般用于对一些数组,或者一组数字来进行从大到小,从小到大来进行排序。比如我们随便输入成绩,然后让我们来进行大到小来排序,然后打印输出。简单又快捷,可以试试。


 

一、冒泡排序的思路。

冒泡排序它在使用过程中是采取替换的方式来进行的。

比如我们有一组没有排序的数字: 4 3 2 1,我们想把它们从小到大的进行排序。

首先我们要明白下标(比如根据上边的数组: 4 3 2 1 它们的下标是: 0 1 2 3 4 ,4的下标是0,3的下标是1,下标加1我们下标指向的数字就发生改变了。4 和 3 的下标加1,下标指向的数字就是 3 和 2 了,现在3和 2下标就来到 1和 2了)这里没写数字的交换只是写了下标的改变,指向的数字也发生改变而已。

 

一开始的数组和下标,用下划线来表示下标

4 3 2 1没有改变4 3 2 1
0 1 2 3没有改变0 1 2 3 

 

 

 

 

我们先拿4 和 3 进行比较,4 比 3 大然后我们交换数字,下标加1

4 3 2 14 3进行交换, 4 3 2 1变成3 4 2 13 4 2 1
0 1 2 3  下标加1,0 1 下标来到 1 20 1 2

 

 

 

再拿4 和 2 进行比较,4 比 2 大然后我们交换数字,下标加1

3 4 2 14 2进行交换, 3 4 2 1变成 3 2 4 13 2 4 1
0 1 2下标加1,1 2 下标来到 2 30 1 2 3

 

 

 

再拿4 和 1进行比较,4 比 1 大然后我们交换数字,当4来到数组最后,我们结束这第一轮的交换。开始第二轮循环交换

3 2 4 14 1进行交换, 3 2 4 1变成 3 2 1 43 2 1 4
0 1 2 3下标加1,2下标来到3,3下标后面没有数字,所以不变0 1 2 3

 

 

 

开始第二轮的数组交换。下标又从0 和 1开始标记。开始不变

3 2 1 4不变3 2 1 4
0 1 2 3不变0 1 2 3 

 

 

 

我们先拿3 和 2 进行比较,3 比 2 大然后我们交换数字,下标加1

3 2 1 43 2进行交换, 变成2 3 1 42 3 1 4
0 1 2 3  下标加1,0 1 下标来到 1 20 1 2

 

 

 

然后进行一轮轮的比较,交换最后我们就可以得到数组1 2 3 4。

 

根据上边的了解,我们再来看代码是如何实现的。

 

二、代码实现

1.创建数组,计算数组的个数

代码如下:

//printf的头文件
#include <stio.h>
int main()
{
	//创建数组
	int arr[] = { 4, 3, 2, 1, };
	//计算数组的个数,把得到的个数给sz
	int sz = sizeof(arr) / sizeof(arr[0]);

	return 0;
}

2.创建循环变量,冒泡排序的主要代码

代码如下:

int main()
{
	//创建数组
	int arr[] = { 4, 3, 2, 1, };
	//计算数组的个数,把得到的个数给sz
	int sz = sizeof(arr) / sizeof(arr[0]);
	//创建循环的变量
	int i = 0;
	int j = 0;
	//循环实现冒泡排序,i < sz(sz是i要循环的次数)
	for (i = 0; i < sz; i++)
	{
		//sz - 1是要得到下标的具体数值,比如:4 3 2 1,
		//他们的下标是0 1 2 3,下标是从0开始的,所以我们要减1得到数组的正确标记
		// - i是要减去每完成i轮的次数
		for (j = 0; j < sz - 1 - i; j++)
		{
			//if判断arr[j](下标0)如果大于arr[j + 1]就进去交换数值,
            //也可以改成小于变为从大到小
			if (arr[j] > arr[j + 1])
			{
				//进行交换
				//创建tmp来接收数组的数字,不然我们的数字替换成其他数字了
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
				
			}
		}
	}

	return 0;
}

3.打印数组和完整代码

代码如下:

int main()
{
	//创建数组
	int arr[] = { 4, 3, 2, 1, };
	//计算数组的个数,把得到的个数给sz
	int sz = sizeof(arr) / sizeof(arr[0]);
	//创建循环的变量
	int i = 0;
	int j = 0;
	//循环实现冒泡排序,i < sz(sz是i要循环的次数)
	for (i = 0; i < sz; i++)
	{
		//sz - 1是要得到下标的具体数值,比如:4 3 2 1,
		//他们的下标是0 1 2 3,下标是从0开始的,所以我们要减1得到数组的正确标记
		// - i是要减去每完成i轮的次数
		for (j = 0; j < sz - 1 - i; j++)
		{
			//if判断arr[j](下标0)如果大于arr[j + 1]就进去交换数值,
            //也可以改成小于变为从大到小
			if (arr[j] > arr[j + 1])
			{
				//进行交换
				//创建tmp来接收数组的数字,不然我们的数字替换成其他数字了
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
				
			}
		}
	}

	//最后我们打印数组
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

三、以输入的形式进行排序

这只是增加了一个输入的代码,挺简单的就不多写注释了

1.完整代码

代码如下:

int main()
{
	//n是你要输入多少数字的
	int n = 3;
	int arr[40] = { 0 };
	int i = 0;
	//这里n有几次就循环多少次,然后把数字存到数组里
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}

	for (i = 0; i < n; i++)
	{
		int j = 0;
		for (j = 0; j < n - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
	for (i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

总结

这里对文章进行总结:
以上就是今天要讲的内容,本文仅仅简单介绍了冒泡排序的一些小方法,还有一些其他的代码实现,这里我就不多写了(其实是多的我也不会了)。

文章还有许多的瑕疵,这个我也是第一次写还请多多包涵。

然后谢谢观看

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值