冒泡排序——C语言实现

🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥


🏀一、冒泡排序的定义

🌴冒泡排序(Bubble Sort):是常用排序算法中比较简单的一种。其基本思路是将待排序的序列从头遍历到尾,遍历n趟(n为序列元素个数)。每一趟依次比较相邻的两个数,如果顺序错误就交换,然后继续往后遍历,这样一趟下来,最大(最小)的数就被冒到了序列尾部。

⚽二、图解

在这里插入图片描述

⚾三、动图演示

在这里插入图片描述

🏐四、冒泡排序的特点

1、冒泡排序原理及其简单,容易理解;
2、时间复杂度:O(N^2);
3、空间复杂度:O(1);
4、稳定性:稳定。

⚽五、代码实现

#include<stdio.h>
//冒泡排序,交换排序的一种

//打印函数
void Print(int* arr, int n)
{
	for (int i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
}

//交换函数
void Swap(int* p1, int* p2)
{
	int tmp = *p1;
	*p1 = *p2;
	*p2 = tmp;
}

//冒泡排序
void BubbleSort(int* arr, int n)
{
    //趟数
	for (int i = 0; i < n; i++)
	{
		//单趟排序
		int Ischange = 0;//标志是否发生交换,如果没有就代表已经有序,不需要再排
		for (int j = 0; j < n-i-1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				Swap(&arr[j], &arr[j + 1]);
				Ischange = 1;
			}
		}
		if(Ischange == 0)
		{
			break;
		}
	}
}


void test()
{
	int arr[] = { 2,5,9,8,3,-1,7,5,6,7,0 };
	int n = sizeof(arr) / sizeof(arr[0]);
	BubbleSort(arr , n);
	Print(arr, n);
}

int main()
{
	test();
	return 0;
}

🎱六、注意事项

在代码中的这几行代码

//单趟排序
		for (int j = 0; j < n-i-1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				Swap(&arr[j], &arr[j + 1]);
			}
		}

其中控制j的范围必须控制好。

-i 是因为:随着一趟一趟排序,待排序序列的剩余元素会逐一减少。

if (arr[j] > arr[j + 1])

💉 -1 是因为:上面这句代码,用的是本元素和后一个元素相比,所以j最后只能落到倒数第二个元素上,为了防止越界,所以要-1。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猿桥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值