排序算法 —— 冒泡排序

目录

1.冒泡排序的思想

2.冒泡排序的实现

3.冒泡排序的总结


1.冒泡排序的思想

冒泡排序的思想就是在待排序序列中依次比较相邻两个元素将大的or小的元素往后挪,每一趟都能保证将至少一个元素挪动到正确的位置,然后在待排序序列中重复该过程

2.冒泡排序的实现

代码如下:

void BubbleSort(int* a, int n)
{
	for (int j = 0; j < n; j++)  //枚举结束位置和最后一个元素位置的差值 
	{
		for (int i = 1; i < n-j; i++) //依次枚举相邻的两个元素 
		{
			if (a[i - 1] > a[i])
			{
				swap(&a[i - 1], &a[i]);
			}
		}
	}
}

可以看出,冒泡排序十分的暴力,枚举的次数在最好和最坏情况下都是一个等差数列,但是,有些比较是没有必要的。比如:当某一趟排序中没有发生交换的时候,说明序列有序了,不需要再比较了,所以我们可以对代码进行优化。

优化之后的代码如下:

  • 我们可以增加一个标记位,标记是否发生了交换。
#include <stdio.h>

void swap(int* p1, int *p2)
{
	int t = *p1;
	*p1 = *p2;
	*p2 = t;
}

void BubbleSort(int* a, int n)
{
	for (int j = 0; j < n; j++)  //枚举结束位置和最后一个元素位置的差值 
	{
		int flag = 0;
		for (int i = 1; i < n-j; i++) //依次枚举相邻的两个元素 
		{
			if (a[i - 1] > a[i])
			{
				swap(&a[i - 1], &a[i]);
				flag = 1;
			}
		}

		if (flag == 0)
		{
			break;
		}
	}
}


int main()
{
	int nums[] = {5,4,2,6,3,1,8,9,7};
	
	BubbleSort(nums, 10);
	
	int i = 0;
	while(i < sizeof(nums)/sizeof(int))
	{
		printf("%d ",nums[i]);
		i++;
	}
	
	return 0;
}

3.冒泡排序的总结

  • 时间复杂度:O(N^2)。
  • 空间复杂度:O(1)。
  • 稳定性:稳定 。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值