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