冒泡排序初识


package javal.util.test;

public class BubblingSort {
	public static void main(String[] args) {
		long[] array =new long[] {2,4,2,6,73,64,22,34,11,6};
		bubbleSort(array);
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
	}

	//值得一提的是这个程序写的很骚,是我等晚辈应该学习的
	public static void bubbleSort(long[] array) {
		int max,min,len=array.length;
		for (max=len-1; max > 1; max--) {
			for(min=0;min < max;min++) {
				if(array[min] < array[min + 1]) {
					long temp =array[min];
					array[min] = array[ min + 1 ];
					array[min + 1] = temp;
				}
			}
		}
	}
	
}


         冒泡排序的几个注意点:

         1.外层for循环从数组的最后开始,即max等于array.length - 1,没经过一次循环max - 1,下标大于max的数据项都已经是排好序的了,变量max 在每完成一次内部循环 就后移一位,因此下次循环就不会再处理已经排好序的数据项了。

         2.内层for循环从数组的开始算起,即min=0, 每完成一次内部循环 min + 1,直到min == max 结束一次循环,在内循环中,比较 array[min] 和 array[min +1] 的两个数据项,如果 前者大于后者,则交换两个数据项,此时用到了一个中间变量,至于中间变量的用途,大家都应该很明白了,不在赘述。

        ps: 关于算法中条件的不变性,在很多算法中,有些条件在算法执行过程中是始终保持不变的,这些条件称为不变性,在上述的程序中,不变性 是指 大于max 的数据项 是已经排好序的,该条件在整个算法的执行过程中始终是为真的。
              关于冒泡算法的效率:一层循环为O(N), 两层循环为O(N * N )  即 O(N2)  这里是N的2次方  不是N 乘以2!!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值