zoukankan      html  css  js  c++  java
  • 排序—冒泡排序

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

  • 相关阅读:
    【BZOJ3218】 a+b Problem
    【BZOJ3993】 星际战争
    【BZOJ3991】 寻宝游戏
    【BZOJ2959】长跑 (LCT+并查集)
    NOIP2017记
    【CF 678F】Lena and Queries
    【Learning】多项式乘法与快速傅里叶变换(FFT)
    Subsequence Count (线段树)
    【留言板】
    【bzoj 4173】数学
  • 原文地址:https://www.cnblogs.com/zsslll/p/5378739.html
Copyright © 2011-2022 走看看