本文对传统的冒泡排序进行了一些优化,减少了循环次数。

时间复杂度

若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数 C 和记录移动次数 M 均达到最小值: C(min)=n-1 , M(min)=0 。所以,冒泡排序最好的时间复杂度为 O(n);
若初始文件是反序的,需要进行  趟排序。每趟排序要进行  次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:
冒泡排序的最坏时间复杂度为O(n^2) 。
综上,因此冒泡排序总的平均时间复杂度为O(n^2) 。

算法稳定性

冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
 
 /**
  * 冒泡排序 JAVA
  * 优化后的冒泡排序
  * 增加一个isSort本轮是否进行了排序的判断,如果没有进行排序则说明排序已经结束直接退出
  * @author Administrator
  * @time 20160731
  */
 public abstract class BubblingSort {
     ////////////////开始冒泡排序
     public static int[] Sort(int[] array )
     {
         boolean isSort=false;//判断是否进行过排序,默认为没有进行排序,如果没有进行排序则直接结束
         for (int i = 0; i < array.length-1; i++) {
             isSort=false;//每轮排序前先将排序标识置位false
             for (int j = 0; j < array.length-i-1; j++) {
                 if(array[j]>array[j+1])
                 {
                     int temp =array[j+1];
                     array[j+1]=array[j];
                     array[j]=temp;
                     isSort=true;//如果为true则本轮进行了交换,继续下一轮
                 }
             }
             if(!isSort)break;//如果本轮没有进行过循环,结果为false直接跳出,不进行下一轮的检索
         }
         return array;    //return array
     }
     ///////////结束冒泡排序
 }

自己在里面加了个判断是否已经排序结束,如果排序已经完成,则立即结束排序,不进行继续循环检测!

我在另一个类里面调用的方法:

 public class arithmetic_TestClass {
     public static void main(String[] args) {
         //测试数组 int 型
         int array[]={4,9,5,3,7,6,8,3,2,1};    

         //冒泡排序 优化过的冒泡排序
         array=BubblingSort.Sort(array);

         for (int i : array) {
             System.out.print(i+"  ");
         }

     }
 }

执行的结果如下:

1  2  3  3  4  5  6  7  8  9

成功实现!

冒泡排序优化JAVA的更多相关文章

  1. 怎么优化JAVA程序的执行效率和性能?

    现在java程序已经够快的了,不过有时写出了的程序效率就不怎么样,很多细节值得我们注意,比如使用StringBuffer或者StringBuilder来拼接或者操作字符串就比直接使用String效率高 ...

  2. Tomcat 优化 java.lang.OutOfMemoryError: Java heap space 的解决方法

    Tomcat 优化 java.lang.OutOfMemoryError: Java heap space 的解决方法 java.lang.OutOfMemoryError: Java heap sp ...

  3. jvm系列(十):如何优化Java GC「译」

    本文由CrowHawk翻译,是Java GC调优的经典佳作. 本文翻译自Sangmin Lee发表在Cubrid上的"Become a Java GC Expert"系列文章的第三 ...

  4. 冒泡排序之Java实现

    冒泡排序之Java实现 一.方法一 package cn.com.zfc.lesson21.sort; import java.util.Arrays; /** * * @title BubbleSo ...

  5. jvm系列(七):如何优化Java GC「译」

    本文由CrowHawk翻译,地址:如何优化Java GC「译」,是Java GC调优的经典佳作. Sangmin Lee发表在Cubrid上的”Become a Java GC Expert”系列文章 ...

  6. jvm系列(十):如何优化Java GC「

    转自:https://www.cnblogs.com/ityouknow/p/7653129.html 本文由CrowHawk翻译,地址:如何优化Java GC「译」,是Java GC调优的经典佳作. ...

  7. 冒泡排序,冒泡性能优化--java实现

    冒泡排序说明: 一次比较两个元素,如果他们的顺序错误就把他们交换过来. 重复地进行直到没有再需要交换,也就是说已经排序完成. 越小的元素会经由交换慢慢“浮”到数列的顶端. 冒泡排序算法的运作如下: 比 ...

  8. 冒泡排序及优化(Java实现)

    向大端冒泡 public class BubbleSort { public static <T extends Comparable<? super T>> void sor ...

  9. Java基础(45):冒泡排序的Java封装(完整可运行)

    1.冒泡排序 package lsg.ap.bubble; import java.util.*; public class BubbleSort { public static void bubbl ...

随机推荐

  1. 剑指Offer:面试题23——从上往下打印二叉树(java实现)

    问题描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 按照层次遍历的方法,使用队列辅助. 1.将根结点加入队列. 2.循环出队,打印当前元素,若该结点有左子树,则将其加入队列,若 ...

  2. zk抢主

    package com.autonavi.tinfo.t1.traffic.pub.openlr.util; import java.util.Collections;import java.util ...

  3. JavaScript笔记:DOM基础

    一.什么是DOM DOM全称是document object model(文档对象模型).在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM.通俗的说D ...

  4. python类及其方法

    python类及其方法 一.介绍 在 Python 中,面向对象编程主要有两个主题,就是类和类实例类与实例:类与实例相互关联着:类是对象的定义,而实例是"真正的实物",它存放了类中 ...

  5. NK3C开发要点

    1.业务逻辑:文档, 2.后端资料 框架:spring + mybatis + maven + Shiro + 数据库(Oracle.SQL Server.MySQL) 分层:nmodel,ndal, ...

  6. ERROR SparkUncaughtExceptionHandler: Uncaught exception in thread

    ERROR SparkUncaughtExceptionHandler: Uncaught exception in thread Thread[appclient-registration-retr ...

  7. android 多线程 示例

    public class MyRun implements Runnable { int count = 1000; @Override public void run() { while (true ...

  8. sql基础知识(新手必备)

    一.简单查询 1.查询所有数据,查询部分列数据,列别名 SELECT * FROM 表名 SELECT 列1 AS 'BIAOTI1','BIAOTI2'=列2  FROM 表名 2.查询不重复的数据 ...

  9. VS&SQL StartUp Crash - CLR20R3

    VS2013和SQL Management Studio 在启动时直接崩溃,错误提示CLR20R3,问题签名4是windowsbase, 这说明是操作系统的问题导致启动崩溃,在网上找到一些解决方案: ...

  10. MS SQL Server之光标、存储过程和触发器

    光标 通常数据库操作被认为是以数据集为基础的操作,但是光标被用于以记录为单位来进行操作,来获取数据库中的数据的子集.光标一般用于过程化程序里的嵌入的SQL语句. 对光标的定义如下: DECLARE C ...