冒 泡 排 序

文章详细解释了冒泡排序的原理,通过举例说明如何通过相邻元素的比较和交换将一个整形数组按升序排列。在每一轮冒泡过程中,最大的元素逐渐‘浮’到数组的末尾。文章还逐步展示了如何编写冒泡排序的代码,包括确定趟数和比较次数的关键步骤。
摘要由CSDN通过智能技术生成

目录

什么是冒泡排序?

冒泡排序思路

总结: 


这里我们实现一个冒泡排序,将一个整形数组排序,首先我们要知道什么是冒泡排序。

什么是冒泡排序?

冒泡排序的思想简单来说就是两两相邻的元素进行比较,有可能的话需要交换。

这里我们对一组整数进行排序,目标是:升序

假设这组整数原本的顺序是

9,8,7,6,5,4,3,2,1,0

这时候我们就会把他第一个第二个数子拿出来作比较

9,8,7,6,5,4,3,2,1,0                9>8

不满足升序的条件,这个时候我们就需要交换这两个数字,他就会变成

8,9,7,6,5,4,3,2,1,0

这个时候我们再对比第二个第三个数字

8,9,7,6,5,4,3,2,1,0                9>7

不满足升序的条件,这个时候我们就需要交换这两个数字,他就会变成

8,7,9,6,5,4,3,2,1,0

这个时候我们再对比第三个第四个数字

8,7,9,6,5,4,3,2,1,0                9>6

不满足升序的条件,这个时候我们就需要交换这两个数字,他就会变成

8,7,6,9,5,4,3,2,1,0

这个时候我们再对比第四个第五个数字

8,7,6,9,5,4,3,2,1,0                9>5

不满足升序的条件,这个时候我们就需要交换这两个数字,他就会变成

8,7,6,5,9,4,3,2,1,0

....................................................

..................以此类推...................

....................................................

直到我们对比第九个第十个数字

8,7,6,5,4,3,2,1,9,0                9>0

不满足升序的条件,这个时候我们就需要交换这两个数字,他就会变成

8,7,6,5,4,3,2,1,0,9

这个时候,9就到了正确的位置,我们剩下待排序的内容就是

8,7,6,5,4,3,2,1,0

然后再进行上述操作,一一比较两个相邻的元素,他就会变成

7,6,5,4,3,2,1,8,9

然后这个时候8也到了正确的位置,我们剩下的排序内容就右减小了一个数字,变成了

7,6,5,4,3,2,1,0

....................................................

..................以此类推...................

....................................................

最终就会变成我们想要的结果

0,1,2,3,4,5,6,7,8,9

这就是冒泡排序

由上我们可以知道,一趟冒泡排序解决一个数字,然这个数字来到为最终因该出现的位置上,假设这个整形数组里面有n个数字,而解决整个排序,就需要        n-1        躺冒泡排序。

冒泡排序思路

我们首先定义一个整型数组和函数。

#include<stdio.h>

void Sort(int arr[])
{
	
}

int main()
{
	//整形数据
	int arr[] = { 2,3,8,4,6,9,5,7,1,0 };
	//写一个函数对数组进行排序
	Sort();
	return 0;
}

然后我们需要得知数组的元素个数有几个,这样我们才能知道需要进行多少趟冒泡排序。

注意:这里我们用数组总元素个数除以第一个数组第一个元素,就能得到数组的元素个数。

然后再把        sz        传到函数里面。

#include<stdio.h>

void Sort(int arr[], int sz)
{
	
}

int main()
{
	//整形数据
	int arr[] = { 2,3,8,4,6,9,5,7,1,0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
	//写一个函数对数组进行排序
	Sort(arr,sz);
	return 0;
}

紧接着下来我们就要确定冒泡排数的趟数

#include<stdio.h>

void Sort(int arr[], int sz)
{
	//趟数
	int i = 0;
	for (i = 0; i <= sz - 1; i++)
	{
		//一趟冒泡排序
	}
}

int main()
{
	//整形数据
	int arr[] = { 2,3,8,4,6,9,5,7,1,0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
	//写一个函数对数组进行排序
	Sort(arr,sz);
	return 0;
}

当有十个元素时,我们要对比九对

当有九个元素时,我们要对比八对,以此类推。

这里我们定义一趟冒泡排序里面我们要对比多少次。

#include<stdio.h>

void Sort(int arr[], int sz)
{
	//趟数
	int i = 0;
	for (i = 0; i <= sz - 1; i++)
	{
		//一趟冒泡排序
		int j = 0;
		for(j=0;j<;j++)
		{
			
			
		}
	}
}

int main()
{
	//整形数据
	int arr[] = { 2,3,8,4,6,9,5,7,1,0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
	//写一个函数对数组进行排序
	Sort(arr,sz);
	return 0;
}

现在我们知道了冒泡排序要排序几趟,一趟里面要对比几次,这时我们就要写判断条件。

判断条件很简单,我们就是要第一个元素和第二个元素相比较,当第一个元素比第二个元素小时,我们就不交换,只有当第一个元素比第二个元素大时,我们就要交换两个元素。

#include<stdio.h>
void Sort(int arr[], int sz)
{
	
	//趟数
	int i = 0;
	for (i = 0; i <= sz - 1; i++)
	{
		//一趟冒泡排序
		int j = 0;
		for(j=0;j<;j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
}

int main()
{
	//整形数据
	int arr[] = { 2,3,8,4,6,9,5,7,1,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	//写一个函数对数组进行排序
	Sort(arr,sz);
	return 0;
}

这时候我们就要编辑这里的判断条件

 这里我们假设10个元素,我们就要对比9次

然后会变成9个元素,我们就要对比八次

这里写        sz-1        肯定是不合适的

正确写法是        sz-1-i        

假设        10        个元素

第一趟        10-1-0        就是9

第二趟        10-1-1        就是8

以此类推...

最后再把数组打印出来就完成啦!

#include<stdio.h>

void Sort(int arr[], int sz)
{
	
	//趟数
	int i = 0;
	for (i = 0; i <= sz - 1; i++)
	{
		//一趟冒泡排序
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
}

int main()
{
	//整形数据
	int arr[] = { 2,3,8,4,6,9,5,7,1,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	//写一个函数对数组进行排序
	Sort(arr,sz);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d",arr[i]);
	}
	return 0;
}

运行效果:

总结: 

冒泡排序相对简单,只要逻辑疏通了,再加上注意一些小细节,比如        sz        要在主函数里面定义,因为数组名我们在上一篇讲过,是首元素的地址,当他传到以  void Sort(int arr[], int sz)这种当时传到函数里面,他只有一个元素,这样        sz        就求不出来数组元素的个数。

因为是地址,按道理来说我们因该用指针来接收,但是即使用指针来接收,我们在函数里面求数组个数也是行不通的,因为指针变量不是4就是8。

void Sort(int * arr, int sz)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值