栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言实现冒泡排序

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言实现冒泡排序

1. 主要思路 冒泡排序的主要内容呢就是对数组内的两两数字进行比较排序。给一个数组“9,8,7,6,5,4,3,2,1,0”,这里以升序为例子,从9开始,两两比较,大的数往前递进,9>8,往前递进,9>7,再往前递进,以此类推,在这一次排序中,数组最后变成“8,7,6,5,4,3,2,1,0,9”,这里一共10个数字,9排序的时候进行9次排序,接着8进行排序,此时9已经排序了,剩下9个数字排序8次,以此类推,第一个要点就是排序的次数,10个数字,要进行9次排序,排序的次数就是9次,也是我们这个排序流程中主要注意的量。 梳理完大致流程后,接着就是实现排序的具体过程,还是以9为例,9>8,然后9与8交换,这也是一个要点,每一个数比较时要比较几次,随着一个一个数排序完成后,要进行比较的次数越来越少,比较的次数也是我们要注意的一个量。 数字的排序,每一个数字进行的比较次数就是主要两个循环中要注意的量 2. 具体实现过程
//函数的主要功能实现排序,因此不需要返回值,定义类型为void
void bubble_sort(int arr1[], int a)
{
	//排序的次数
	int i = 0;
	//每一个数比较的次数
	int j = 0;
	//交换时用到的中间变量
	int temp = 0;
	

	for (i = 0; i < a; i++)
	{
		
int sz = sizeof(arr) / sizeof(arr[0]);

以上就可以得出实现排序的大致流程。

void bubble_sort(int arr1[], int a)
{
	//排序的次数
	int i = 0;
	//每一个数比较的次数
	int j = 0;
	//交换时用到的中间变量
	int temp = 0;
	
	//排序的次数
	for (i = 0; i < a; i++)
	{
		
	
	int arr[] = {3,1,22,44,5,62,7,84,0,45};
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr, sz-1);
	//输出排序后的每一个数
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}

	return 0;
}
3. 重点问题

在主函数内有一串代码,即计算排序的次数,

int sz = sizeof(arr) / sizeof(arr[0]);

这里要明白一点:一般情况下数组名存放的是首元素的地址,放在主函数内计算时算出来的就是数字的个数,但有两种例外:

  1. sizeof(数组名),这里的数组名存放的是整个数组的地址,计算的是整个数组的长度
  2. &(数组名),这里的数组名存放的也是整个数组的地址,表示的是整个数组的地址,

因此当我们在主函数内计算 sz 时,就是正常计算出整个数组的长度。
如果我们把上述代码放到调用的函数(bubble_sort)内再进行计算,由于我们实参传递的是首元素的地址,在bubble_sort 内再用sizeof计算,上述代码就变成了首元素长度除以首元素长度,计算出来的值则为1,后面的循环就无法进行了。这是要重点注意的地方

 
4.代码优化 

到此,整个过程就实现完了,最后再思考一下,如果输入的是一个已经完成排序的数组,那还要经过整个循环慢慢计算,整个代码的效率就低了很多,所以再加上一个条件,来判断数组是否是排序完成的数组。

void bubble_sort(int arr1[], int a)
{
	//排序的次数
	int i = 0;
	//每个数比较的次数
	int j = 0;
	//排序时用到的中间变量
	int temp = 0;
	//附加的判断条件
	int flag = 1;

	for (i = 0; i < a-1; i++)
	{
		/*排序的具体过程,随着排序进行,需要进行的比较次数每次少一次,
		即j
		for (j = 0; j < a - i; j++)
		{
			if (arr1[j] > arr1[j + 1])
			{
				//交换
				temp = arr1[j];
				arr1[j] = arr1[j + 1];
				arr1[j + 1] = temp;
				flag = 0;
			}
			//附加的判断条件
			if (1 == flag)
			{
				break;
			}
		}

	}
}
int main()
{
	int arr[] = {3,1,22,44,5,62,7,84,0,45};
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr,sz-1);
	//输出排序后的每一个数
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}

	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027146.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号