排序—冒泡排序

 

 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语言程序设计进阶篇。

posted @ 2016-04-11 15:51  xiaoss  阅读(233)  评论(0编辑  收藏  举报