[5] 算法之路 - 冒泡排序

气泡排序法 算法

顾名思义,就是排序时

最大的元素会如同气泡一样移至右端,其利用比较相邻元素的方法,将大的元素交换至右端

所以大的元素会不断的往右移动,直到适当的位置为止。

 

基本的气泡排序法可以利用旗标的方式稍微减少一些比较的时间,当寻访完阵列后都没有发生任何的交换动作,表示排序已经完成,而无需再进行之后的回圈比较与交换动作,例如:

 

排序前:95 27 90 49 80 58 6 9 18 50

 

27 90 49 80 58 6 918 50 [95] 95浮出

27 49 80 58 6 9 1850 [90 95] 90浮出

27 49 58 6 9 18 50[80 90 95] 80浮出

27 49 6 9 18 50 [5880 90 95] ......

27 6 9 18 49 [50 5880 90 95] ......

6 9 18 27 [49 50 5880 90 95] ......

6 9 18 [27 49 50 5880 90 95] 由于接下来不会再发生交换动作,排序提早结束

 

在上面的例子当中,还加入了一个观念,就是当进行至ii+1时没有交换的动作,表示接下来的i+2n已经排序完毕,这也增进了气泡排序的效率


SourceCodes


// 冒泡排序
int BubbleSort(int a[],int lens)
{
	int i,j;
	for(i=0;i<lens-1;i++)
	{
		for(j=0;j<lens-1-i;j++)
		{
			if(a[j]>a[j+1])
			{
				SWAPER(a[j],a[j+1]);
			}
		}
	}
	return 0;
}

int BubbleSort2(int a[],int lens)
{
	int i,j;
	bool flag=true;
	for(i=0;i<lens-1 && flag==true;i++)
	{
		flag=false;
		for(j=0;j<lens-1-i;j++)
		{
			if(a[j]>a[j+1])
			{
				SWAPER(a[j],a[j+1]);
				flag=true;
			}
		}
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值