美文网首页
排序算法Java版(1)--冒泡排序

排序算法Java版(1)--冒泡排序

作者: 想看烟花么 | 来源:发表于2021-09-26 12:48 被阅读0次
代码的世界虽逻辑繁华,却又大道至简。

什么是冒泡排序

网上有很多实现冒泡算法的文章,看了都觉得大同小异,我相信大家看到最多的是这样一句话来阐述什么是冒泡排序 "依次比较相邻的两个数,然后将小的数放在前面,大的数放在后面(或者大数放前面,小数放后面)",没错,核心思想就是这样,但核心思想仅仅就只是核心思想,而一般我们所看到的代码一上来就是这段优化过后的实现,比如:

public static void main(String[] args) {
    int[] a = { 6, 3, 7, 2, 10, 5 };
    int temp;
    boolean changed = false;
    for (int i = 0; i < a.length - 1; i++) {
        changed = false;
        for (int j = 0; j < a.length - 1 - i; j++) {
            if (a[j] > a[j + 1]) { 
                temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
                changed = true
            }
        }
        if(!changed){
            break;
        }
    }
    System.out.println(Arrays.toString(a));
}

对于以上代码,如果你是初学者亦或者未理解透时,你或许会有这样的疑问:为什么第二重循环这里 为什么要减 i ?我相信在网上看到大多数文章要么就没提,要么一带而过亦或者本来就是非初学者,如果你也只是强记不去完全理解,下次直接搬出来或让你直接写,大概率你会发现依旧是看不懂或是写不出来的。
这里为了让大家更加理解冒泡排序,当然更是为了让自己以后便于快速复习冒泡排序,我对网上看到的文章进行一个整理与总结。
参考链接:https://blog.csdn.net/q5706503/article/details/82851752

怎么理解以上冒泡程序

要理解以上冒泡排序就要理解2个优化点:
1.‘a.length - 1 - i ’怎么理解
2.变量changed 作用是什么

对于‘a.length - 1 - i ’的理解其实就是:

第1次遍历数组,把最大数的挑出来放在最后(此时最后1位已经完成,后续不再比较)
第2次遍历数组,把第二大的数挑出来放在倒数第二(此时最后2位已经完成,后续不再比较)
那么,假设有N个数,当遍历第N遍后,也就像冒泡一样从小到大排好序了。
我们用一张图来形象表示下:


(来自以上标注的参考链接文章中).gif
对于变量changed

其实就是例如类似这样的数组:
int[] a = { 1,2,3,4,5,6,7,8};
int[] b = { 8,1,2,3,4,5,6,7};
int[] c = { 8,1,3,2,4,5,6,7};
因为它们的数据变化比较小,n个数据只需遍历0次或者1~2次就可以了,不需要遍历n次。changed变量就是为了优化达到无需或少遍历的情况,避免性能浪费。

总结:

当数据量小时 时间复杂度不明显,当数据量大时,以上2点的优化可以很大程度上提升程序的性能。
我相信当看到这里时,你已经完全理解了冒泡排序,并能自己写出来了,所以:

我也是有底线的,感谢您的耐心阅读。

相关文章

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • 必须知道的排序算法和对应语言的实现

    必须知道的排序算法—Java实现 1 冒泡排序 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较...

  • java 实现排序算法之「选择排序」

    java 实现排序算法系列 继冒泡排序算法之后,选择排序终于和大家见面了。为什么冒泡排序之后要说选择排序呢,是因为...

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

  • Java版排序算法

    网上很多Java排序算法有错误,以下是本人经过整理校验后的算法。 1、冒泡排序 2、快速排序 3、选择排序 4、堆...

  • 排序算法Java版(1)--冒泡排序

    代码的世界虽逻辑繁华,却又大道至简。 什么是冒泡排序 网上有很多实现冒泡算法的文章,看了都觉得大同小异,我相信大家...

  • 算法:冒泡排序

    本文内容:1、什么是冒泡排序?2、冒泡排序的 C/OC 实现与算法分析。 算法总目录:算法? 1、什么是冒泡排序?...

  • 2022-03-01

    1.排序算法: 到底什么是排序?-它是排列列表中项目顺序的算法。 重要的排序算法—— 冒泡排序:冒泡排序是最基本的...

网友评论

      本文标题:排序算法Java版(1)--冒泡排序

      本文链接:https://www.haomeiwen.com/subject/kbrqnltx.html