12.10C语言 **冒泡排序法

一.简介

冒泡排序的基本思想是:通过重复交换相邻的不按顺序的项来工作,每一遍的排序过程中,都会将一个未排序的元素放置到已排序的末尾,直到所有元素都已排序。在每一遍排序过程中,都会将一个未排序的元素放置到已排序的末尾,这个过程被称为“冒泡”,因为在这个过程中,小的元素会像气泡一样“冒”到数列的顶部。

二.代码部分

#include<stdio.h>
void paixu(int arr[], int size);
void paixu(int arr[], int size) {
	int i, j, tem;
	for (i = 0; i < size - 1; i++) //外层循环为排列次数,size-1
	{
		int count = 0;
		for (j = 0; j <size - 1 - i; j++)//内层循环比较两个数,size-1-i表示减去已经排好的数
		{
			if (arr[j] > arr[j + 1]) //从小到大排序
			{
				int tem = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1]=tem;
				count = 1;
			}
		}
		if (count == 0)
		{
			break;
		}//如果某一次没有交换位置,说明已经排好序,退出循环
	}
}
int main() {
	int arr[10];
	int i;
	printf("请输入10个数\n:");
	for (i = 0; i < 10; i++)
	{
		scanf_s("%d", &arr[i]);
	}
	printf("排序前的数组:"); 
	for (i = 0; i < 10; i++)
	{
		printf("%d",arr[i]);
	}
	printf("\n排序后的数组:\n");
	paixu(arr, 10);
		for ( i = 0; i < 10; i++)
		{
			printf("%d", arr[i]);
		}
		return 0;
}

三.核心代码分析

  • if (arr[j] > arr[j + 1]):这是一个条件判断,它比较当前元素 arr[j] 和下一个元素 arr[j + 1]。如果当前元素大于下一个元素,那么就执行花括号内的代码。//如9>8执行
  • int tem = arr[j];:这行代码将 arr[j] 的值保存到临时变量 tem 中。//tem=9
  • arr[j] = arr[j + 1];:这行代码将 arr[j + 1] 的值赋给 arr[j]
  • arr[j + 1]=tem;:这行代码将临时变量 tem 中保存的原来的 arr[j] 的值赋给 arr[j + 1]。\\这两个语句用于把89交换位置
  • count = 1;:每次成功的交换操作后,count 都会设置为1。这个变量用来检查数组是否已经排好序。//通过不停的比较和交换,最后·会把最大的数给移到最后面,其余的数会往前冒泡,重复这个过程,一共执行n-1次,n-1-i是为了不和最后一个已经排好的数比较

四.总结

冒泡排序的优点:

  1. 算法简单易懂,容易实现。
  2. 稳定排序,不改变相同元素的相对顺序。

冒泡排序的缺点:

  1. 时间复杂度为O(n^2),不适合大规模数据的排序。
  2. 效率低下,如果数组已经有序或者基本有序,冒泡排序会更快,因为会提前结束循环。

因此,冒泡排序适用于小数据量或者对稳定性要求较高的场景,但不适用于大数据量或高效率要求的场景。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值