起泡排序

先给出一个数组r[]={10,2,6,7,3},让其从小到大排序

基本思想:让数组中(按序号从小到大)相邻的两个元素比较,如果反序则交换,直至没有反序记录为止。

rj   ...    rj+1  |  ri+1 <= ...<= rn-1 <=rn

无序区                  有序区

1<=j<=i-1   |     已位于最终位置

 

初始序列 [10  2  6  7  3]

第一趟排序结果 [2  6  7  3  10]

第二趟排序结果 [2  6  3  7  10]

第三趟排序结果 [2  3  6  7  10]

 

请注意:在一趟起泡排序过程中,如果有多个记录交换到最终位置(最终位置指的是已经排好序的区域),则下一趟起泡排序将不处理这些记录;另外,如果一趟起泡排序过程中,若没有记录相互交换,说明序列已经排好序了,可以直接结束算法。


主要算法代码:

public static void bubbleSort(int[] n) {
		
		int bound,exchange=n.length-1;	//第一趟起泡排序的区间是[0,n-1]
		
		while(exchange!=0) {	//当上一趟排序有记录交换时
			bound=exchange;
			exchange=0;
			for(int j=0;j<bound;j++)	//无序区为[0...bound]
	//若有记录交换,exchange负责最后一次记录交换的位置,最后一次交换的位置之后便是有序区,下次无需检测
				if(n[j]>n[j+1])		
				{
					int temp=n[j];
					n[j]=n[j+1];
					n[j+1]=temp;
					exchange=j;
				}
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值