前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java语言冒泡排序详解

Java语言冒泡排序详解

作者头像
全栈程序员站长
发布2022-08-31 16:29:20
3350
发布2022-08-31 16:29:20
举报
文章被收录于专栏:全栈程序员必看

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

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

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

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

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

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

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

第二次比较过程如下:

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

第三次比较过程如下:

简单说明:第三次比较最大值5出现最后一个位置,下次比较,5不参与比较。

第四次比较过程如下:

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

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

代码语言:javascript
复制
    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.cn/151729.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档