C语言实现冒泡排序

C语言学习——冒泡排序的运用
c语言中的冒泡排序是学习编程的一大基础,同时也是对于排序算法中的简单的一种



一、冒泡排序是什么?

冒泡排序是排序算法中简单的一种,这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

二、冒泡排序的原理

我们假设数组中的数据为下图:在这里插入图片描述
我们的目的是将数组中的数据按照从小到大方式排序

我们从左边第一个数据开始依次与右边数据相比较如果右边数据比左边小那就进行交换
这样操作可以保证送到最右边的数据一定比左边的任何一个数据大

第一次操作如图:
在这里插入图片描述

第二次操作如图:
在这里插入图片描述

如此循环九次最终得到:
在这里插入图片描述

我们将数据9排到了正确的位置,我们再次排序选择最左边的数据8进行重复操作:
在这里插入图片描述

注意!!! 这里进行了七次重复比较操作

之后我们再次从最左边数据开始,进行重复比较操作,而每次操作过后都会比上次比较少一次 这是因为之前将数据送到右边时我们已经保证右边每增加的一个都会比左边大,即已经排好的数据不用再次比较了

最后我们达到目的,使数据从小到大排序:
在这里插入图片描述

三、总结

我们每次操作都是从所有数据的最左边开始,依次和比较右边的数据,以此筛选出最大的数据,从而保证了送到右边的数据最大,而每次进行完操作之后就代表着有一个数据正确的放到了右边,而下一次操作的比较时就可以少比较一次。
也就是我上文说的已经排好的数据不用再次比较了

所以,我们每次操作的结果是将一个正确的数字放到右边,而获得结果的方式是不停的比较,我们可以用C语言中的两个循环嵌套来实现此操作,大循环是我们排好N个数据要进行N-1次操作(最后一个自动排序),而大循环内的小循环实现的是控制每次操作需要的比较。
代码如下

四、冒泡排序的C语言代码

#include<stdio.h>
int main()
{
	int arr[] = { 9,8,7,6,5,4,3,2,1 };
	int i = 0;
	for (i = 0; i < 9 - 1; i++)//此处控制操作的次数
	{
		int j = 0;
		for (j = 0; j < 9 - 1 - i; j++)//此处控制该次操作的比较
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j+1];
				arr[j + 1] = arr[j];
				arr[j] = tmp;
			}
		}
	}
	for (i = 0; i < 9; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

运行结果:
在这里插入图片描述

五、改进思路及其代码

当我们了解完冒泡排序的基本思路,有些勤于思考的小伙伴可能会提出疑问
冒泡排序是一个完整的过程,也就是说在实际情况下,我们在循环还没结束之前,就可能已经完成了所有排序
但程序并不知道该排序已完成,依旧会继续跑下去,只不过没有进行交换值的操作
所以我们可以据此改进以上代码,实现在完成所有排序的情况下退出程序

#include<stdio.h>
int main()
{
	int arr[] = { 9,8,7,6,5,4,3,2,1 };
	int i = 0;
	for (i = 0; i < 9 - 1; i++)//此处控制操作的次数
	{
		int j = 0;
		int flag = 1;//假设该程序已经有序
		for (j = 0; j < 9 - 1 - i; j++)//此处控制该次操作的比较
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j+1];
				arr[j + 1] = arr[j];
				arr[j] = tmp;
				flag = 0;//进行了交换,说明该程序未完成排序
			}
		}
		if(flag == 1)//当某一次程序未进行任何一次操作时,说明程序已经有序,则退出程序,终止冒泡
		{
			break;
		}
	}
	for (i = 0; i < 9; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

以上就是C语言实现冒泡排序的完整思路 希望能帮助到读者,有任何的问题或者想提出建议请私信我!
如果你恰好看了我的文章,并且对你有帮助的话请给我点个赞和关注我吧!

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: #include <stdio.h> int main(){ int array[10]; int i, j, temp; printf("请输入10个数字:"); for (i = 0; i < 10; i++) { scanf("%d", &array[i]); } for (j = 0; j < 9; j++) { for (i = 0; i < 9 - j; i++) { if (array[i] > array[i + 1]) { temp = array[i]; array[i] = array[i + 1]; array[i + 1] = temp; } } } printf("排序后结果为:"); for (i = 0; i < 10; i++) { printf("%d, ", array[i]); } return 0; } ### 回答2: 下面是一段使用C语言编写的自动排序代码: ```c #include <stdio.h> void bubbleSort(int arr[], int n) { int i, j, temp; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j+1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } int main() { int arr[] = {5, 2, 8, 1, 10}; int n = sizeof(arr) / sizeof(arr[0]); printf("排序前的数组:\n"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } bubbleSort(arr, n); printf("\n排序后的数组:\n"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; } ``` 上述代码使用冒泡排序算法对一个整数数组进行排序。通过`bubbleSort`函数,我们对数组中的元素进行相邻比较,并根据大小交换元素的位置。在`main`函数中,我们对一个数组进行初始化,并打印排序前的数组。然后,调用`bubbleSort`函数对数组进行排序。最后,打印排序后的数组。 该代码可以输出以下结果: ``` 排序前的数组: 5 2 8 1 10 排序后的数组: 1 2 5 8 10 ``` 希望以上回答对您有所帮助。 ### 回答3: C语言自动排序代码可以使用各种排序算法实现,比如冒泡排序、插入排序、选择排序、快速排序等。下面是一个采用冒泡排序算法的简单示例代码: ```c #include <stdio.h> void bubbleSort(int arr[], int n) { int i, j; for (i = 0; i < n-1; i++) { for (j = 0; j < n-i-1; j++) { if (arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = sizeof(arr)/sizeof(arr[0]); printf("排序前的数组:\n"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } bubbleSort(arr, n); printf("\n排序后的数组:\n"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; } ``` 运行以上代码,将会输出: 排序前的数组: 64 34 25 12 22 11 90 排序后的数组: 11 12 22 25 34 64 90 以上代码使用了冒泡排序算法来对给定数组进行排序。通过循环比较相邻元素的大小,将大的元素逐渐移动到数组的末尾,从而实现排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值