Java语言冒泡排序详解

Java语言冒泡排序详解基于很多同学在面试的过程中被问到一些基础的算法,导致整个面试过程不理想,而基础的算法和数据结构往往都是一些大公司任职的基本要求,这也严重影响拿offer的成功率。接下来的一段时间我将陆续对一些简单的基础的算法和数据结构进行详细说明。我将从排序算法说起,下面从冒泡排序开始说起。排序结果:数据从小到大。首先说一下冒泡排序的思想:每次比较从第一个数据开始,数据两两比较,如果左边数据比右边数据大,则交换左右

大家好,又见面了,我是你们的朋友全栈君。

基于很多同学在面试的过程中被问到一些基础的算法,导致整个面试过程不理想,而基础的算法和数据结构往往都是一些大公司任职的基本要求,这也严重影响拿offer的成功率。接下来的一段时间我将陆续对一些简单的基础的算法和数据结构进行详细说明。我将从排序算法说起,下面从冒泡排序开始说起。

排序结果:数据从小到大。

首先说一下冒泡排序的思想:每次比较从第一个数据开始,数据两两比较,如果左边数据比右边数据大,则交换左右数据。继续比较。一次比较结束出现一个最大值在最后一个位置。

思想就是代码的体现,掌握思想写代码66的。

我以5个数据为例集合冒泡排序的思想进行图解说明。
数据为 8、5 、2 、6 、1。
第一次比较过程如下:
这里写图片描述

简单说明:
每次比较从第一个数据开始,也就是8开始。数据两两比较,也就是8和5进行比较。如果左边数据比右边数据大,则交换左右数据,也就是8比5大,8和5的位置交换。继续比较,也就是交换位置后,8继续和后面的数据比较。当最大值8出现在了最后一个位置时,第一次比较结束。当下一次比较,8已经是最大值就没必要参与比较。

第二次比较过程如下:
这里写图片描述

简单说明:第二次比较过程和第一次比较过程是一致的,第二次比较最大值6出现在最后一个位置。下一次比较,最大值6不参与比较。

第三次比较过程如下:
这里写图片描述
简单说明:第三次比较最大值5出现最后一个位置,下次比较,5不参与比较。

第四次比较过程如下:
这里写图片描述

简单说明:第四次比较最大值2出现最后一个位置。至此,所有数据排序过程结束。

文字与图理解完毕,直接上代码演示。

    public static void main(String[] args) {
        // 定义10个数据的数组
        int data[] = new int[10];
        // 初始化数组
        initData(data);
        // 打印排序前数组数据
        print(data);
        // 冒泡排序
        bubbleSort(data);
        // 打印排序后的数组数据
        print(data);
    }

    /** * 冒泡排序:每次比较从第一个数据开始,数据两两比较,如果左边数据比右边数据大,则交换左右数据。继续比较。一次比较结束出现一个最大值在最后一个位置。 * * @param data */
    private static void bubbleSort(int[] data) {

        // 比较的是次数
        for (int i = data.length - 1; i > 0; i--) {
            // 每次比较冒泡的过程(查找最大值的过程),每次从第一个数据开始,因此j每次都是从零开始。
            //从图解中可以看出,随着比较次数的增多,冒泡的过程逐渐减少,因此i的值是随着比较的次数增多而减少。
            //反推i的初始值为最大,又由于5个数据比较次数为4次,可得出i的初始值为数据个数-1。
            for (int j = 0; j < i; j++) {

                // 数据交换
                if (data[j] > data[j + 1]) {
                    // 交换
                    int temp = data[j];
                    data[j] = data[j + 1];
                    data[j + 1] = temp;
                }

            }
        }
    }

    // 该方法随机生成1-100的随机数
    private static void initData(int[] data) {

        for (int i = 0; i < data.length; i++) {

            data[i] = (int) Math.ceil(Math.random() * 100);
        }

    }

    // 该方法用于打印数组数据
    private static void print(int[] data) {

        System.out.print("[");
        for (int i = 0; i < data.length; i++) {

            if (i != data.length - 1) {
                System.out.print(data[i] + ",");
            } else {
                System.out.println(data[i] + "]");
            }
        }

    }

下一篇:选择排序详解,敬请期待…………..

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151729.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用use index优化sql查询「建议收藏」

    使用use index优化sql查询

    2022年2月17日
    35
  • k8s pod配置_为什么要用k8s

    k8s pod配置_为什么要用k8sk8sPod的结构Pod定义Pod的配置镜像拉取策略启动命令环境变量(不推荐)端口设置资源配额Pod的介绍Pod的结构每个Pod中都包含一个或者多个容器,这些容器可以分为两类:用户程序所在的容器,数量可多可少。Pause容器,这是每个Pod都会有的一个根容器,它的作用有两个:可以以它为依据,评估整个Pod的健康状况。可以在根容器上设置IP地址,其它容器都共享此IP(Pod的IP),以实现Pod内部的网络通信(这里是Pod内部的通讯,Pod之间的通讯采用虚拟二层网络技术来实现,我们当前环境使

    2022年8月9日
    7
  • goland 2021.01激活码【永久激活】

    (goland 2021.01激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~B…

    2022年3月22日
    272
  • 2021 goland激活码[在线序列号]

    2021 goland激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    108
  • 网站在线漏洞检测_md5码生成

    网站在线漏洞检测_md5码生成系统管理员通常从svn/git中检索代码,部署站点后通常首先会生成该站点所有文件的MD5值,如果上线后网站页面内容被篡改(如挂马)等,可以比对之前生成MD5值快速查找去那些文件被更改,为了使系统管理员第一时间发现,可结合crontab或nagios等工具。分享一例[url=http://www.jbxue.com/jb/python/]python[/url]结合[url=http://w…

    2022年9月29日
    2
  • django权限管理例子_如何获得自定义房间权限

    django权限管理例子_如何获得自定义房间权限前言上一篇我们分析了认证的源码,一个请求认证通过以后,第二步就是查看权限了,drf默认是允许所有用户访问权限源码分析源码入口:APIView.py文件下的initial方法下的check_per

    2022年7月30日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号