冒泡排序(C语言)


前言

今天学习一下C语言的冒泡排序,为何是“冒泡”排序呢?就拿我们平时的碳酸饮料举个例子,当我们摇晃我们的碳酸饮料时,会从底部产生小气泡,然后不断的向上升,气泡也变得越来越大,就可以知道小气泡在下,大气泡在上。就类似我们把第一组杂乱无章的数字排成一组从小到大的数字,就称为冒泡排序。可用于我们对学号,成绩,身高等的按序排列。


提示:以下是本篇文章正文内容,下面案例可供参考

一、如何程序实现?

我们首先了解了冒泡排序是什么,就下来我们要知道我们如何在我们的程序上实现,让电脑读懂;排序:就是要两两进行比较大小后在排序,所以我们此时就要想到for循环语句,如果第n个数字比第n+1个数字大,我们是不是要对其进行交换?此时我们的大概流程都已经梳理的差不多了,我们就可以先把大概写下来:

#include<stdio.h>
int main()
{
   int arr[]={4,6,71,61,53,11,3,25,1,21};//一个乱序的数组
   int sz=sizeof(arr)/sizeof(arr[0]);//数组个数
   int i,j;
   //趟数
   for (i = 0; i < sz - 1; i++)
{
	//一趟冒泡排序的细节
	int j = 0;
	for (j = 0; j < sz - i - 1; j++)
	{
		if (arr[j] > arr[j + 1])
		{
		//较大的数要进行交换,这时给出一个“空杯子”的变量temp
			int temp = arr[j];
			arr[j] = arr[j + 1];
			arr[j + 1] = temp;
		}
	}

}
   return 0;
}

写到这里我们大概知道整个的冒泡排序该如何实现,接下来我们将其在优化改善一下,如何避免重复的比较和让整个代码看起来更赏心悦目呢,代码写完后我们在将其输出。

二、代码实现

我们可以自己定义一个冒泡排序的函数进行使用,这样使我们和读者能够更好的阅读,如果我们要减少趟数我们只要给出一个假设,假设这个数已经是有序的了,将不会进行判断,此时我们给出我们定义的flag=1;假设有序,接下来看一下代码的实现:

#include<stdio.h>

void bubble_sort(int arr[], int sz)
{
	int i = 0;
	//趟数
	for (i = 0; i < sz - 1; i++)
	{
		int flag = 1;//假设已经有序
		int j = 0;
		for (j = 0; j < sz - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
				flag = 0;//无序则为0
			}
		}
		if (flag == 1)
		{
			break;
		}
	}
}
 
int main()
{
	int arr[] = { 4,6,71,61,53,11,3,25,1,21 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	//冒泡排序函数
	bubble_sort(arr, sz);
	//遍历排序后的数组
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

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


总结

这个自己在学习时的思路,仅供参考,需要改进的地方希望大家多多建议!共同进步。在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值