专栏首页JAVAandPython君漫画:冒泡排序最牛逼的状态!

漫画:冒泡排序最牛逼的状态!

基础版

public static int[] bubbleSort(int[] array) {
    int temp;
    if(array.length == 0) return array;
    for (int i = 0; i<array.length;i++){
        for(int j = 0;j<array.length-1-i;j++){
            if(array[j+1] < array[j]){
               temp = array[j+1];
               array[j+1] = array[j];
               array[j] = temp;
            }

        }
    }
    return array;
}

进阶1

public static int[] bubbleSort2(int[] array) {
    int temp;
    boolean flag = true; //定义一个标志
    if(array.length == 0) return array;
    int k = array.length;
    while (flag) {
        flag = false;

            for(int j = 1;j<k;j++){
                if(array[j] < array[j-1]){
                    //交换
                    temp = array[j-1];
                    array[j-1] = array[j];
                    array[j] = temp;
                    flag = true; //如果有数据交换,那么将flag设置为true,代表还有数据未排序
                }
            }
    k--; //每次排序的最后一个元素都是当前排序的最大值,所以需要--

    }
    return array;
   }

先给出一个冒泡排序的动画图,相信根据这个图来大家会非常容易理解。

除了刚刚小k写的算法,我们还可以做进一步的优化。如果有100个数的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在第一趟遍历后,最后发生交换的位置必定小于10,且这个位置之后的数据必定已经有序了,记录下这位置,第二次只要从数组头部遍历到这个位置就可以了。

进阶2

public static int[] bubbleSort3(int[] array) {
    int temp;
    if(array.length == 0) return array;

    int flag = array.length;
    int k ;
    while (flag>0) {
        k = flag;
        flag = 0;
        for(int j = 1;j<k;j++){
            if(array[j] < array[j-1]){
                //交换
                temp = array[j-1];
                array[j-1] = array[j];
                array[j] = temp;
                flag = j;   //记录非排序列中的最后一个值
            }
        }
    }
    return array;
}

文终


本文分享自微信公众号 - JAVAandPython君(JAVAandPythonJun),作者:JAP君

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 漫画:最最最最最简单的选择排序

    当我们用到它的时候,数据规模越小越好,不会占用额外的内存空间并且运行时间与输入无关。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法了吧。

    Python进击者
  • 你知道为什么Java的main方法必须是public static void?

    Main 方法是我们学习 Java 编程语言时知道的第一个方法,你是否曾经想过为什么 main 方法是 public、static、void 的。当然,很多人首...

    Python进击者
  • 漫画:插入排序是什么?

    其实从图中你可以感受到插入排序是一个比较简单的排序,没有过多的复杂步骤。它排序的基本原理也非常的简单,对于没有排序的元素,在已排序的元素中从后往前依次扫描,找到...

    Python进击者
  • numpy的基本用法——numpy array分割

    Tyan
  • 经典排序算法解析 原

        许多高级语言中都提供有排序函数,但是掌握一些经典排序算法的基本原理和编码方法还是很有必要,这个学习过程可以帮助我们更好的理解每种排序算法的设计思路,本篇...

    珲少
  • PHP数组函数

    白胡杨同学
  • 冒泡排序算法(Bubble Sort)

             对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组的前面,把大的元素移动到

    itlemon
  • PHP | 删除数组中指定索引的元素,并且重排索引

    凌川江雪
  • 快速排序的四种python实现

    快速排序算法,简称快排,是最实用的排序算法,没有之一,各大语言标准库的排序函数也基本都是基于快排实现的。

    py3study
  • python list定义并初始化长度

    使用Python的人都知道range()函数很方便,今天再用到它的时候发现了很多以前看到过但是忘记的细节。这里记录一下range(),复习下list的slid...

    py3study

扫码关注云+社区

领取腾讯云代金券