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)
上一篇 2022年6月20日 下午11:46
下一篇 2022年6月20日 下午11:46


相关推荐

  • 无线视频传输技术「建议收藏」

    无线视频传输技术「建议收藏」原文地址:http://www.ed-china.com/ART_8800047847_400002_500018_HN_151edec4.HTMWiDi/Miracast将在无线高清视频传输市场占最大份额据IHSiSuppli公司的显示电子特别报告,在消费与移动产品高清视频无线传输市场,三种基于Wi-Fi的视频技术将胜过两种应用范围较窄的专有技术。今年能传输高清视频

    2026年4月14日
    6
  • C语言输入输出语句

    C语言输入输出语句一 控制台输入输出 1 字符数据的输入 输出字符输出 putchar ch 字符输入 getchar ch 2 格式化输入 输出格式输出 printf 格式控制字符串 输出列表 格式输入 scanf 格式控制字符串 地址列表 3 字符串的输

    2026年3月20日
    4
  • strstr(str1,str2)函数使用时注意事项

    strstr(str1,str2)函数使用时注意事项可能有的人还没听过strstr函数,个人认为这个一个很实用的函数,strstr(str1,str2)函数是字符串处理函数之一,位于头文件“string.h”中。对于处理字符串的一些问题有很大的帮助。定义:strstr(str1,str2)函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。定义说的有点羞涩难懂。举个例子就…

    2022年6月25日
    37
  • 经常使用哈希函数的比較及其C语言实现「建议收藏」

    经常使用哈希函数的比較及其C语言实现

    2022年2月6日
    37
  • PostgreSQL-模糊查询

    PostgreSQL-模糊查询!/bin/bash1模糊查询时,大多数情况下首先想到的是like‘%关键字%’或基于gin索引的正则表达式,gin至少需要三个字符才会使用索引,对于汉语来说十分不方便;2在海量数据的情况下,基于like和gin索引的正则表达式均不理想时,一般采用分词后进行查询.3分词存在两个弊端3.1词库的维护是比较繁重的工作.当词库中没有的关键词会导致查询结果不正确.3.2历史数据的维护工作不好处理

    2022年5月7日
    44
  • 【一键新机】免root/不刷机/拒绝Xposed 实现 Android改机,全新技术分析。「建议收藏」

    【一键新机】免root/不刷机/拒绝Xposed 实现 Android改机,全新技术分析。「建议收藏」此篇文章仅探讨Android底层技术。不提供任何软件和安装包……我们通过一些底层技术对手机中的各种基础信息进行一个修改。主要修改的参数有:Android_Id、IMEI、手机序列号、手机号码、WIFI-MAC、WIFI-Name、安卓系统版本、ROM固件、手机号码、手机型号、手机品牌、CPU型号、手机制造商、GPS定位、通话记录模拟、手机短信模拟……等各类安卓手机系统信息的修改功能…

    2022年6月8日
    140

发表回复

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

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