• 排序—冒泡排序


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

  • 相关阅读:
    kvm虚拟迁移(5)
    kvm虚拟化网络管理(4)
    计算系数
    排列组合
    错排
    加分二叉树
    皇宫看守
    战略游戏
    数字转换
    JDK8 HashMap源码分析
  • 原文地址:https://www.cnblogs.com/zsslll/p/5378739.html
Copyright © 2020-2023  润新知