【C语言】冒泡排序保姆级教学

C语言冒泡排序保姆级教学

直奔主题:

拿排升序 举例子
第一步:

将想要排序的数组中数值最大的那个数 排到该数组的最后

具体实现如下图:

第一步代码实现

c 复制代码
for (int i = 1; i < n ; i++)//n为数组大小此处为4
{
	if (a[i - 1] > a[i])//注意越界,若排降序将大于改为小于即可
	{
		int tmp = a[i - 1];
		a[i - 1] = a[i];
		a[i] = tmp;
		exchange = 1;
	}
}

第二步 (关键)

由于通过第一步我们已经将最大的数排在了数组最后

因此只需要将数组中第二大的数 排到数组的倒数第二个位置

所以这里我们就采用双重循环来控制要排序的区间

这里就是我们要排序的区间从原来的a[0]到a[3]缩小到 a[0]到a[2],

即每次将排序区间中最大的数排到该区间最后后,将该排序区间缩小1;

代码如下:

c 复制代码
for (int j = 0; j < n - 1; j++)
//此处条件为j < n - 1 可以根据第二个for循环得到,当n为1时依旧要进入第二个for
//循环对a[0]与a[1]比较,所以第二个for循环条件n - j 最小应该为2,那么j最大就应该为 n - 2;
{
	for (int i = 1; i < n - j; i++)//注意此处条件变为i < n - j,来达到每次排序完后区间缩小1的目的
	{
		if (a[i - 1] > a[i])//注意越界
		{
			int tmp = a[i - 1];
			a[i - 1] = a[i];
			a[i] = tmp;
		}
}

冒泡排序的优化

这个双重循环已经可以解决排序问题了,但是可以对它进行优化,使得我们的代码更加健壮(运行时间更短),优化代码如下:

c 复制代码
void BubbleSort(int* a, int n)//BubbleSort中文为冒泡排序的意思
{
	for (int j = 0; j < n - 1; j++)
	{
		int exchange = 0;//在此定义一个变量来判断当前数组是否已经排好序了
		for (int i = 1; i < n - j; i++)
		{
			if (a[i - 1] > a[i])//注意越界
			{
				int tmp = a[i - 1];
				a[i - 1] = a[i];
				a[i] = tmp;
				exchange = 1;
			}
		}
		//如果已经排好序就不会再进入第二个for循环,变量的值就不会为1,直接退出循环
		if (exchange == 0)
		{
			break;
		}
	}
}

数组元素和大小大家可以自行修改

OK呀家人们,现在直接上全代码一观:

c 复制代码
#include<stdio.h>
void BubbleSort(int* a, int n)
{
	for (int j = 0; j < n - 1; j++)
	{
		int exchange = 0;
		for (int i = 1; i < n - j; i++)
		{
			if (a[i - 1] > a[i])//注意越界
			{
				int tmp = a[i - 1];
				a[i - 1] = a[i];
				a[i] = tmp;
				exchange = 1;
			}
		}
		if (exchange == 0)
		{
			break;
		}
	}
}
int main()
{
	int a[4] = { 4,2,3,1 };
	BubbleSort(a, 4);
	for (int i = 0; i < 4; i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}

运行结果:

如果有帮助到您,给俺个赞呗,制作不易,点赞收藏方便以后浏览。

相关推荐
Yue丶越1 小时前
【C语言】自定义类型:结构体
c语言·开发语言
再睡一夏就好2 小时前
string.h头文件中strcpy、memset等常见函数的使用介绍与模拟实现
c语言·c++·笔记·string·内存函数·strcpy
dangdang___go2 小时前
动态内存管理||malloc和free.realloc和calloc
c语言·开发语言·算法·动态内存管理
云雾J视界5 小时前
从位运算到状态机:用纯C重构红外/DS18B20/I²C协议,告别“黑盒库“的嵌入式实战指南
c语言·数据库·重构
代码游侠7 小时前
日历的各种C语言实现方法
c语言·开发语言·学习·算法
玩转C语言和数据结构18 小时前
C语言编程入门攻略(最新学习路线,适合新手小白)
c语言·c语言入门·c语言下载·c语言知识点总结·c语言自学·c语言教程·c语言怎么学
Bona Sun18 小时前
单片机手搓掌上游戏机(十四)—pico运行fc模拟器之电路连接
c语言·c++·单片机·游戏机
无限进步_19 小时前
C语言数组元素删除算法详解:从基础实现到性能优化
c语言·开发语言·windows·git·算法·github·visual studio
松涛和鸣19 小时前
16、C 语言高级指针与结构体
linux·c语言·开发语言·数据结构·git·算法
口袋物联21 小时前
设计模式之适配器模式在 C 语言中的应用(含 Linux 内核实例)
c语言·设计模式·适配器模式