冒泡排序初识

版权声明:本文为博主原创文章,未经博主允许不得转载,转载请标明原文出处。 https://blog.csdn.net/qq_31408331/article/details/79968252


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!!! 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页