冒泡排序(C语言)

目录

1.简介

2.代码部分

2.1运行结果

3.代码分析

3.1代码部分运行过程

​编辑

 3.2代码段的解释


1.简介

中文名:冒泡排序

英文名:Bubble Sort

时间复杂度:O(n²)

稳定性:稳定排顺序算法

原理:比较相邻的元素,当第一个比第二个大(小)时,进行交换在每一对相邻的元素都完成该操作后,最大(小)的元素会被排到最后,再将除最后一个元素外的所以元素重复进行以上操作,直至完成升序(降序)排序。

2.代码部分

#include<stdio.h>
#include<stdlib.h>
//冒泡排序(升序)
#if(1)  
int main()
{
	int arr[10] = { 4,3,6,8,9,1,0,2,7,5 };

	printf("排列前:");
	for (int i = 0; i < 10; i++)
	{
		printf("%3d", arr[i]);
	}
	printf("\n");

	for (int i = 0; i < 10; i++)   //10个数字,总共要进行10次循环
	{
		for (int j = 0; j < 10- 1 - i; j++)  //每一次循环都从第一个数字开始比较
		{
			if (arr[j] > arr[j + 1])
			{
				int change = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = change;
			}
		}
	}

	printf("排列后:");
	for (int i = 0; i < 10; i++)
	{
		printf("%3d", arr[i]);
	}

	printf("\n");
	system("pause");
	return 0;
}
#endif

2.1运行结果

3.代码分析

3.1代码部分运行过程

首先从原数组看: 

① 当i= 0,j = 0时开始第一次比较,arr[0] > arr[1], 所以二者开始交换;

②当i = 0,j = 1,时arr[1]  > arr[2],不交换;

③当i = 0,j = 2,  时arr[2]  > arr[3],不交换;

④当i = 0,j = 3,  时arr[3]  > arr[4],不交换;

⑤当i = 0,j = 4,  时arr[4]  > arr[5],发生交换;

⑥ 当i = 0,j = 5,  时arr[5]  > arr[6],发生交换;

⑦  当i = 0,j = 6,  时arr[6]  > arr[7],发生交换;

⑧ 当i = 0,j = 7,  时arr[7]  > arr[8],发生交换;

⑨ 当i = 0,j = 8,  时arr[8]  > arr[9],发生交换;

到这里外层i的第一次循环结束:

结果如下:

这里只解释了i 的第一次循环,i 剩下的循环与第一次的运行原理相同,所以没有做出解释。

 3.2代码段的解释

    在3.1中我们的代码运行到了i = 0,j = 8,总共运行了9次后结束了i的第一次循环。其中,在 j

的第9次循环时,我们就将arr[8]与arr[9]进行了比较,代码中 j  < 10 - 1 - i 是为了:

    ①在 j 的第9次循环时,我们就将arr[8]与arr[9]进行了比较,其中arr[10]存放的是'\0',所以arr[9]

不需要与arr[10]进行比较,所以要 -1。

    ②在 i 的每一次循环后最大的一个数字会被存放到数组的最后一个位置。(在3.1中数组中最大的元素9在循环后被存放到了arr[9]的位置),每次循环得到的最大数字不参与 i 的下一次循环,所以 要 - i。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值