`
keepwork
  • 浏览: 332407 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java算法--冒泡排序

 
阅读更多

开发者博客www.developsearch.com

 

 

冒泡排序可以算是最经典的排序算法了,记得小弟上学时最先接触的也就是这个算法了,因为实现方法最简单,两层 for 循环,里层循环中判断相邻两个元素是否逆序,是的话将两个元素交换,外层循环一次,就能将数组中剩下的元素中最小的元素“浮”到最前面,所以称之为冒泡排序。

照例举个简单的实例吧:

  1.  
  2.  
  3. 初始状态:   [2419263936731293823]  
  4.  
  5. 内层第一趟: [24192639367312923 , 38 ] ( 9th [23]<->8th [38 )  
  6.  
  7. 内层第二趟: [241926393673123 , 29 , 38] ( 8th [23]<->7th [29] )  
  8.  
  9. 内层第三趟: [2419263936723 , 31 , 2938] ( 7th [23]<->6th [31] )  
  10.  
  11. 内层第四趟: [2419263936723312938] ( 7 、 23 都位于正确的顺序,无需交换)  
  12.  
  13. 内层第五趟: [241926397 , 36 , 23312938] ( 5th [7]<->4th [36] )  
  14.  
  15. 内层第六趟: [2419267 , 39 , 3623312938] ( 4th [7]<->3rd [39] )  
  16.  
  17. 内层第七趟: [24197 , 26 , 393623312938] ( 3rd [7]<->2nd [26] )  
  18.  
  19. 内层第八趟: [247 , 19 , 26393623312938] ( 2nd [7]<->1st [19] )  
  20.  
  21. 内层第九趟: [7 , 24 , 1926393623312938] ( 1st [7]<->0th [24] )  
  22.  
  23. ……… 

其实冒泡排序跟选择排序比较相像,比较次数一样,都为 n * (n + 1) / 2 ,但是冒泡排序在挑选最小值的过程中会进行额外的交换(冒泡排序在排序中只要发现相邻元素的顺序不对就会进行交换,与之对应的是选择排序,只会在内层循环比较结束之后根据情况决定是否进行交换),所以在我看来,选择排序属于冒泡排序的改进版。

实现代码:

 

/**  
 * Bubble Sorting, it's very similar with Insertion Sorting  
 */ 
BUBBLE(new Sortable() {  
    public <T extends Comparable<T>> void sort(T[] array, boolean ascend) {  
        int length = array.length;  
        int lastExchangedIdx = 0;  
        for (int i = 0; i < length; i++) {  
            // mark the flag to identity whether exchange happened to false  
            boolean isExchanged = false;  
            // last compare and exchange happened before reaching index i  
            int currOrderedIdx = lastExchangedIdx > i ? lastExchangedIdx : i;  
            for (int j = length - 1; j > currOrderedIdx; j--) {  
                int compare = array[j - 1].compareTo(array[j]);  
                if (compare != 0 && compare > 0 == ascend) {  
                    exchange(array, j - 1, j);  
                    isExchanged = true;  
                    lastExchangedIdx = j;  
                }  
            }  
            // if no exchange happen means array is already in order  
            if (isExchanged == false) {  
                break;  
            }  
        }  
    }  
}) 

 

 

分享到:
评论

相关推荐

    [Java算法-排序]冒泡排序.java

    该资源提供了Java中实现冒泡排序的全面指南。文档中涵盖了冒泡排序的基本概念,包括如何对数组进行排序以及如何在Java中实现冒泡排序。此外,文档还包括一个逐步指南,介绍了如何在Java中实现冒泡排序,包括详细的...

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...

    详解Java常用排序算法-冒泡排序

    Java排序算法之冒泡排序详解 冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就交换位置。这个过程持续对数列的末尾进行,直到整个数列都排序完成...

    排序算法 -- 冒泡排序

    冒泡排序是一种基础且经典的排序算法,它的基本思想是通过不断地交换相邻的逆序元素,使得每一轮排序后,最大的元素“浮”到数组的末尾。这个过程就像水底下的气泡逐渐升至水面一样,因此得名“冒泡排序”。 在Java...

    应用Java和Python实现冒泡排序算法

    冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python...

    Java后端算法-冒泡排序和选择排序对比

    本文将深入探讨两种基础且常见的排序算法:冒泡排序和选择排序。这两种算法都是简单直观的排序方法,但它们在性能和适用场景上有所不同。 **冒泡排序**: 冒泡排序是一种交换排序,通过不断比较相邻元素并交换位置...

    java算法——冒泡排序

    * 冒泡排序: * 每次在无序队列里将相邻两个数一次进行比较, * 将小数调到前面,逐次比较,直至将最大的数移到 * 最后。将剩下的N-1个数继续比较,将次大数移至 * 倒数第二位。

    java排序算法插入选择冒泡

    java排序算法java排序算法插入选择冒泡java排序算法插入选择冒泡

    算法-理论基础- 排序- 原始冒泡排序(包含源程序).rar

    - **伪代码或源代码**:展示冒泡排序的实现,可能是用C、C++、Java、Python等编程语言编写,让读者能直观地看到如何将理论转化为代码。 - **性能分析**:讨论冒泡排序的时间复杂度和空间复杂度,以及它在不同场景下...

    Java-快速排序、冒泡排序和堆排序三种排序讲解、对比及总结.md

    Java-快速排序、冒泡排序和堆排序三种排序讲解、对比及总结 Java-快速排序、冒泡排序和堆排序三种排序讲解、对比及总结 Java-快速排序、冒泡排序和堆排序三种排序讲解、对比及总结

    java排序算法-大全.rar

    1. **冒泡排序**:冒泡排序是一种简单直观的排序算法,通过不断交换相邻的错误顺序元素来逐步完成排序。它重复地走访过要排序的元素,依次比较每一对相邻元素,如果它们的顺序错误就把它们交换过来。走访元素的工作...

    java基础 经典算法之冒泡排序详解

    1.冒泡排序的原理:每次都从第一个元素开始(索引0),向后两两比较,只要后面的比前面的大,就交换(从大到小) 2.通过画图分析,5个数字排4趟,n数字排n-1趟,而外层的for循环代表的是循环的趟数,所以外层循环的结束条件是...

    Java冒泡排序算法

    ### Java冒泡排序算法知识点详解 #### 一、冒泡排序基本概念 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是...

    java代码-使用java解决java冒泡排序算法的源代码

    java代码-使用java解决java冒泡排序算法的源代码 ——学习参考资料:仅用于个人学习使用!

    java算法,快速排序、冒泡排序、选择排序

    java算法,快速排序、冒泡排序、选择排序 快速排序文章:http://blog.csdn.net/yanwenyuan0304/article/details/51822361 冒泡排序文章:http://blog.csdn.net/yanwenyuan0304/article/details/51819045

    Java中数组实例---冒泡排序.pdf

    【冒泡排序算法详解】 冒泡排序是一种基础的排序算法,它的主要思想是通过重复遍历待排序的数列,依次比较相邻的两个元素,如果它们的顺序(如从小到大)错误就把它们交换过来。这个过程就像水底下的气泡一样逐渐...

    java基础冒泡排序.ppt

    冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。 走访元素的工作是重复...

    java实现的排序算法-8个

    冒泡排序是最基础的排序算法之一,通过不断地交换相邻的逆序元素来逐步推进排序。就像水中的气泡一样,大的元素逐渐“浮”到顶部。冒泡排序也是不稳定的,时间复杂度同样为O(n^2)。 8. **InsertSort.java** - 插入...

    JAVA冒泡排序算法

    冒泡排序算法是一种基础的排序算法,通过重复遍历要排序的数列,比较相邻的两个数,如果前一个比后一个大,则将它们两个对调。每一轮遍历结束后,数列中的最大值就会“冒泡”到数列的末尾。简单来说,就是通过重复...

Global site tag (gtag.js) - Google Analytics