深入浅出数据结构(C语言)——冒泡排序

本文摘自《深入浅出数据结构》

解释

从头到尾比较相邻的两个元素,将小的换到前面,大的换到后面。
经过了从头到尾的一趟比较,最大的元素被交换到了最后一个位置,这个过程被称为一趟起泡。

一般来讲,n个元素的冒泡排序需要n-1次起泡,但如果在一次起泡过程中没有发生任何数据交换,
则说明这批数据中的相邻元素都满足前面小,后面大的次序,也就是这批数据是已经排好序了,
就没有必要再进行以后的起泡了,排序可以结束。
void bubbleSort(int a[],int size)
{
	int i,j;
	int tmp;
	bool flag;
	for(i=1;i<size;i++)
	{
		flag=false;
		for(j=0;j<size-i;j++)
		{
			if(a[j+1]<a[j])
			{
				tmp=a[j];
				a[j]=a[j+1];
				a[j+1]=tmp;
				flag=true;
			}
		}
		if(!flag)
			break;
	}
}

当原始序列有序时,冒泡排序出现最好的情况,此时只要一次排序,时间复杂度O(N)
当原始序列逆序时,冒泡排序要n-1次排序,所以时间复杂度为O(N2)

由此可见,冒泡排序适合那种原始数据本来就比较有序的局面,
冒泡排序时稳定的排序方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值