排序算法-冒泡排序

冒泡排序(bubble sort)

概念:

遍历多次数组(n个元素数组,最多遍历n-1次),在每次遍历中,连续对相邻的元素进行比较。如果某一对是降序,则交换他们的值;否则保持不变。


由于较小的值像“气泡”一样逐渐浮向顶部,而较大的值沉向底部,所以这种排序叫冒泡排序。


第一次遍历之后,最后一个元素就是数组的最大值

第二次遍历之后,倒数第二个元素是数组的第二大值

继续整个过程直到所有元素都已排序。


举例:

有6个元素(2,9,5,4,8,1),已经排好序的数字用下划线表示


第一遍

2  9  5  4  8  1   (2与9对比,<,不变)

2  5  9  4  8  1   (9与5对比,>,交换)

2  5  4  9  8  1      

2  5  4  8  9  1

2  5  4  8  1  9

               

第二遍

2  5  4  8  1  9 

2  4  5  8  1  9 

2  4  5  8  1  9      

2  4  5  1  8  9


第三遍

2  4  5  1  8  9   

2  4  5  1  8  9 

2  4  1  5  8  9      


第四遍

2  4  1  5  8  9  

2  1  4  5  8  9  

 

第五遍

1  2  4  5  8  9  


第一次遍历,最后一个元素成为最大值

第二次遍历,因为最后一个元素已确定是最大值,所以排序不用考虑最后一个

...

第i次遍历,排序不需要考虑最后i-1个元素

程序描述如下:

int temp;
for(int i=0;i<list.length-1;i++)
{
	for(int j=0;j<list.length-i-1;j++)
	{
		if(list[j]>list[j+1])
		{
			temp=list[j];
			list[j]=list[j+1];
			list[j+1]=temp;
		}
	}
}

注意:如果在一次遍历中没有发生交换,说明所有元素已经排好序,那么就不必进行下一次遍历。所以程序可以改进为:


boolean needNextPass=true;
for(int i=0;i<list.length-1&&needNextPass;i++)
{
	needNextPass=false;
	for(int j=0;j<list.length-i-1;j++)
	{
		if(list[j]>list[j+1])
		{
			temp=list[j];
			list[j]=list[j+1];
			list[j+1]=temp;
			needNextPass=true;
		}

	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值