1 public static void bubbleSortAsc(int[] list){ 2 boolean needNextPass = true; 3 for(int k=1;k<list.length && needNextPass;k++){ 4 needNextPass = false; 5 for(int i=0;i<list.length-k;i++){ 6 if(list[i]>list[i+1]){ 7 int temp = list[i]; 8 list[i] = list[i+1]; 9 list[i+1] = temp; 10 needNextPass = true; 11 } 12 } 13 } 14 }
在某次记录中如果没有发生交换,那么久不必进行下一次遍历,因为所有的元素都已经排好序。使用该特性改进排序增加boolean needNextpass参数。
冒泡排序时间:
在最佳情况下,冒泡排序算法只需要一次遍历就能确定数组已经排序完毕,不需要进行下一次遍历。由于第一次遍历的次数为n-1,因此在最佳情况下,冒泡排序的时间为:O(n).
在最差情况下,冒泡排序算法需要进行n-1次遍历。第一次遍历需要n-1次比较;第二次遍历需要n-2次比较;一次类推,最后一次需要1次比较。因此比较的总数为(n-1)+(n-2)+...+2+1=(n-1)n/2=n平方/2-n/2=O(n平方)。
因此在最差情况下,冒泡排序的时间为O(n平方)。
说明: 摘自java语言程序设计进阶篇。