我的编程空间,编程开发者的网络收藏夹
学习永远不晚

排序算法图解之Java冒泡排序及优化

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

排序算法图解之Java冒泡排序及优化

1.冒泡排序简介

冒泡排序(Bubble Sorting)即:通过对待排序的序列从前往后,依次比较相邻元素的值,若发现逆序则交换位置,使较大的元素逐渐移动到后部,就像水底的气泡一样逐渐从水面冒出来,这就是冒泡名称的由来

2.图解算法

以将序列{3, 9, -1, 10, -20}从小到大排序为例!

基本思想就是,在每一趟排序实现将最大的数移到序列的最后端!这主要通过比较相邻两个元素实现,当相邻的两个元素逆序的时候,我们就交换它们。

第1趟排序:

第1趟排序共比较了4次,将最大的数10冒泡到了序列的尾部。

第2趟排序:

由于第一趟排序已经将最大是数10给冒泡到了最末端,因此在本次排序中,不需要再比较最后一个元素,故共比较了3次,将子序列(前四个元素)中最大的数9(整个序列中倒数第二大的数)冒泡到了子序列的尾端(原序列的倒数第二个位置)。

第3趟排序:

在第三趟排序时,同理,倒数两个元素位置已经确定,即第一、第二大的数已经排好位置,只需要再将倒数第三大的数确认即可。故比较2次,实现倒数第三大的数3的位置确定。

第4趟排序:

在第四趟排序时,只有第一、第二个元素的位置还不确定,只需要比较一次,若逆序,则交换即可。到此,排序算法完成,原序列已经排序成为一个递增的序列!

小结

一共进行了数组大小-1次趟排序,即外层循环arr.length-1次;每趟排序进行了逐趟减小次数的比较,即内层循环arr.length-i-1次,i从0依次增加。

3.冒泡排序代码实现

参考代码如下,为了便于观察结果,在循环中添加了相应的输出语句:

import java.util.Arrays;


public class BubbleSort {

    public static void main(String[] args) {
        int[] array = {3, 9, -1, 10, -20};
        //排序前
        System.out.println("排序前:" + Arrays.toString(array));

        //冒泡排序
        for (int i = 0; i < array.length - 1; i++) {
            System.out.println("第" + (i+1) + "趟排序开始!");
            for (int j = 0; j < array.length - i - 1; j++) {
                //如果前面的数比后面的数大,则交换
                if(array[j] > array[j+1]){
                    //交换
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
                System.out.println("------第" + (j+1) + "趟排序: " + Arrays.toString(array));
            }
            System.out.println("第" + (i+1) + "趟排序完成: " + Arrays.toString(array));
            System.out.println("================================================");
        }

        //输出排序后的结果
        System.out.println("排序后:" + Arrays.toString(array));
    }
}

实现结果:

4.冒泡排序算法的优化

举个例子,将待排序的序列改为:{5,1,2,3,4},用以上算法来处理,观察一下结果:

可以发现,当第一趟排序结束的时候,序列已经排序完成: 即将5冒泡到了最后,序列实现了从小到大排序。但是原冒泡排序算法,还是义无反顾的进行了数组大小-1趟排序(我可真是大冤种!)

因此,我们需要尝试对算法进行优化!

发现:在冒泡排序的过程中,各个元素都在不断的接近自己的位置,如果下一趟比较中没有进行过任何交换,则说明序列已经有序, 则排序算法已经可以返回结果。因此,考虑在排序算法过程中添加一个标志flag判断元素是否进行过交换,以减少不必要的冤种行为!

优化代码如下:

import java.util.Arrays;


public class BubbleSort {

    public static void main(String[] args) {
        int[] array = {5, 1, 2, 3, 4};
        //排序前
        System.out.println("排序前:" + Arrays.toString(array));

        boolean flag = false; //用于标记是否进行了交换,true则说明进行了交换,false表示无

        //冒泡排序
        for (int i = 0; i < array.length - 1; i++) {
            System.out.println("第" + (i+1) + "趟排序开始!");
            for (int j = 0; j < array.length - i - 1; j++) {
                //如果前面的数比后面的数大,则交换
                if(array[j] > array[j+1]){
                    //交换
                    flag = true; //标记进行了交换
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
                System.out.println("------第" + (j+1) + "趟排序: " + Arrays.toString(array));
            }
            System.out.println("第" + (i+1) + "趟排序完成: " + Arrays.toString(array));
            System.out.println("================================================");
            if (!flag){
                //如果没有进行交换则直接退出,说明排序已经完成
                break;
            }else {
                //回退
                flag = false;
            }
        }

        //输出排序后的结果
        System.out.println("排序后:" + Arrays.toString(array));
    }
}

四趟排序,优化成了只需要两趟排序!又是一个不可多得的小技巧!在算法程序题中,flag的设置是一种常用的编程思想,常常用于回溯算法中,小伙伴们要学会举一反三~

到此这篇关于排序算法图解之Java冒泡排序及优化的文章就介绍到这了,更多相关Java冒泡排序内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

排序算法图解之Java冒泡排序及优化

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

排序算法图解之Java冒泡排序及优化

冒泡排序即通过对待排序的序列从前往后,依次比较相邻元素的值,若发现逆序则交换位置,使较大的元素逐渐移动到后部。本文通过图片和示例介绍了冒泡排序的实现及优化,需要的可以参考一下
2022-11-13

Python排序算法之冒泡排序

我们在编写代码时,经常需要对一些序列做一些排序,排序的方法很多,下面我们讲一下常用的冒泡排序法。需要的朋友可以参考下
2023-01-07

Python3 基本排序算法之冒泡排序,

基本排序算法按时间复杂度分类  O(n^2)  冒泡排序  插入排序  选择排序  Q(n log n)  分而治之  快速排序  归并排序  冒泡排序  相邻的两个元素对比,大的数后推,遍历整个列表一次后,将最大项以冒泡的方式排列i到列表
2023-01-31

Java如何实现冒泡排序及优化

这篇文章给大家分享的是有关Java如何实现冒泡排序及优化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是冒泡排序冒泡排序指重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从小到大)错误就把他们
2023-06-22

图文详解Python冒泡排序算法

本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于冒泡排序的相关问题,包括了算法描述、分析、代码实现等等内容,下面一起来看一下,希望对大家有帮助。冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的
2022-06-14

java实现冒泡排序算法

介绍冒泡排序是一种算法,比较相邻元素,如果他们处在错误的位置上,那么交换他们的位置。排序可以进行升序或者降序。原理从第一个元素开始,比较第一个元素和第二个元素,如果第一个元素大于第二个元素,那么交换他们的位置。比较 第二个元素和第三个元素的位置,如果处在错误的
java实现冒泡排序算法
2018-06-06

如何进行C++冒泡排序及其优化算法

这期内容当中小编将会给大家带来有关如何进行C++冒泡排序及其优化算法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。冒泡排序极其优化算法步骤1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。2.对每
2023-06-21

十大经典排序算法详解之一:冒泡排序,选择排序,插入排序

在讲解排序算法之前,我们首先来了解一下评判一个算法一般都是从哪些角度来评判的.这个只要是稍微懂一点算法的小伙伴一定知道.「这两个标准就是时间复杂度和空间复杂度」。

java数据结构与算法之冒泡排序详解

本文实例讲述了java数据结构与算法之冒泡排序。分享给大家供大家参考,具体如下:前面文章讲述的排序算法都是基于插入类的排序,这篇文章开始介绍交换类的排序算法,即:冒泡排序、快速排序(冒泡排序的改进)。交换类的算法:通过交换逆序元素进行排序的
2023-05-31

TypeScript实现十大排序算法之冒泡排序示例详解

这篇文章主要为大家介绍了TypeScript实现十大排序算法之冒泡排序示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-23

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录