java实现冒泡排序-通俗易懂

自己写的笔记可能有不对的地方,希望大佬指正!
先说思路假设有一个数组是 arr = [24, 69, 80, 57, 13],分别对应的下标是 [0, 1, 2, 3, 4]现在需要把最大的数字放在最后面,就排序成 [13, 24, 57, 69, 80],看样子非常简单。

那么进行第一次排序,24和69排序,下标0对应的是24,和下标1对应的69进行比较。

小的放在左边,大的放在右边,那么这里就不变,这里直接举例子80和57的位置。

80对应的下标是2,57对应的下标是3,现在80比57大所以需要把57变换到80的位置也就是下标变化。

所以需要做的就是把2的下标80变成57,3的下标57变成80就进行了一次交换。

然后就变成了80和13的交换,80比13大,首先80现在的下标是3,13的下标是4。

那么就需要把4的下标13变成80,3的下标80变成13就可以进行了交换,如下交换流程。

从左到右比较

第一轮比较:目标大的放在最后面

第一次比较 [24, 69, 80, 57, 13]

第二次比较 [24, 69, 80, 57, 13]

第三次比较 [24,69,57,80,13]

第四次比较 [24, 69, 57, 13, 80]

第二轮比较:目标把第二大的数放在倒数第二的位置

第一次比较 [24, 69, 57, 13, 80]

第二次比较 [24, 57, 69, 13, 80]

第三次比较 [24, 57, 13, 69, 80]

第三轮比较:目标把第三大的数放在倒数第三的位置

第一次比较 [24, 57, 13, 69, 80]

第二次比较 [24, 13, 57, 69, 80]

第四轮比较:目标把第四大的数放在倒数第四的位置

第一次比较 [13, 24, 57, 69, 80]

到这里可以发现进行了四轮比较,每一轮比较里面还有比较数字的操作,这里可以简单进行代码,如下图就实现了第一轮循环,输出是

24 69 57 13 80,如果我们需要进行第二轮比较只需要把循环的 j < 4变成 j < 3即可

package chapter6.冒泡排序;

public class maopao {
    public static void main(String[] args) {
        int arr[] = {24, 69, 80, 57, 13};
        //定义temp变量
        int temp = 0;
        for (int j = 0; j < 4; j++) {
            //假设这里是第一次循环j为0那么就判断的是arr[0] > arr[1]
            //也就是判断24 > 69
            if (arr[j] > arr[j + 1]) {
                //进行转换操作,稍微看看还是能看懂的因为进行两个数字转换
                //需要用到变量
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
        //输出每次交换过后的数字
        for (int j = 0; j < arr.length; j++) {
            System.out.print(arr[j] + "\t");
        }
        //每次输出完之后换行
        System.out.println();
    }
}

如果要实现第二轮就可以直接把第一轮的代码再复制一遍即可,但是太麻烦了,所以这里就需要用到二层循环,因为有四轮循环,所以代码如下,就已经实现了代码,但是现在需要把代码变活,万一数组变了怎么办。

package chapter6.冒泡排序;

public class maopao {
    public static void main(String[] args) {
        int arr[] = {24, 69, 80, 57, 13};
        //定义temp变量
        int temp = 0;
        //增加外层循环,因为有四轮循环所以循环四次
        for (int i = 0; i < 4; i++) {
            /*
            * 每次循环完成之后需要减去一个1
            * 因为第第一轮比较已经比较完成,也就是第一个最大的数已经出来了
            * 就需要第二个最大的数字,就所以减去一个1,但是第一次循环的时候
            * 时候不需要减去,所以就减去0即可
            *
            * */
            for (int j = 0; j < 4 - i; j++) {
                //假设这里是第一次循环j为0那么就判断的是arr[0] > arr[1]
                //也就是判断24 > 69
                if (arr[j] > arr[j + 1]) {
                    //进行转换操作,稍微看看还是能看懂的因为进行两个数字转换
                    //需要用到变量
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
            //输出每次交换过后的数字
            for (int j = 0; j < arr.length; j++) {
                System.out.print(arr[j] + "\t");
            }
            //每次输出完之后换行
            System.out.println();
        }

    }
}

修改代码如下。

package chapter6.冒泡排序;

public class maopao {
    public static void main(String[] args) {
        int arr[] = {24, 69, 80, 57, 13};
        //定义temp变量
        int temp = 0;
        //增加外层循环,因为有四轮循环所以循环四次
        /*
        *       这里四次可以发现是数组长度减1
        * 可以把i < 4修改为 i < i < arr.length - 1
        *
        * */
        for (int i = 0; i < arr.length - 1; i++) {
            /*
            * 每次循环完成之后需要减去一个1
            * 因为第第一轮比较已经比较完成,也就是第一个最大的数已经出来了
            * 就需要第二个最大的数字,就所以减去一个1,但是第一次循环的时候
            * 时候不需要减去,所以就减去0即可
            *
            * */
            /*
            *       这里四次和上面一样
            *
            * */
            for (int j = 0; j < arr.length - 1 - i; j++) {
                //假设这里是第一次循环j为0那么就判断的是arr[0] > arr[1]
                //也就是判断24 > 69
                if (arr[j] > arr[j + 1]) {
                    //进行转换操作,稍微看看还是能看懂的因为进行两个数字转换
                    //需要用到变量
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
            System.out.print("======第"+(i + 1)+"轮比较======" + "\n");
            //输出每次交换过后的数字
            for (int j = 0; j < arr.length; j++) {
                System.out.print(arr[j] + "\t");
            }
            //每次输出完之后换行
            System.out.println();
        }

    }
}

Original: https://www.cnblogs.com/takagisan/p/16282306.html
Author: 御七彩虹猫
Title: java实现冒泡排序-通俗易懂

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607960/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 老徐和阿珍的故事:缓存穿透、缓存击穿、缓存雪崩、缓存热点,傻傻分不清楚

    人物背景:老徐,男,本名徐福贵,从事Java相关研发工作多年,职场老油条,摸鱼小能手,虽然岁数不大但长的比较着急,人称老徐。据说之前炒某币败光了所有家产,甚至现在还有欠债。阿珍,女…

    Java 2023年6月7日
    087
  • MySQL 服务无法启动。服务没有报告任何错误。

    版本8.0.25,今天启动发现抱错,网上搜索一下发现这样可行 启动MySQL报错: 搜索了一下,按照这样步骤解决了 1.配置一下my.ini [mysqld] basedir =&…

    Java 2023年6月13日
    0100
  • Anaconda3+CUDA10.1+CUDNN7.6+TensorFlow2.6安装(Ubuntu16)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kuberne…

    Java 2023年6月8日
    088
  • 类的动态装载java

    类的动态装载 首先,我们要明白类加载的过程,再来区分静态加载和动态加载,类加载的过程,本质上就是将类文件,从硬盘读取到内存中的过程,而静态加载是在编译时加载,动态加载是在程序运行时…

    Java 2023年6月5日
    0105
  • VSCode官方的配置同步方案

    前言 这几天在迁移电脑工作环境,对于VSCode,我实在不想从头做下载插件、配置代码规则这样的事情,于是求助百度,搜索结果靠前的解决方案基本都是使用 Setings Sync插件,…

    Java 2023年6月7日
    0115
  • C语言-字符串函数的实现(四)之strcmp

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strnc…

    Java 2023年6月10日
    0117
  • Rust多线程之数据共享

    我们都知道Java中通过实现Runnable接口或继承Thread类,来完成一个线程的创建,那么在Rust中是如何实现一个线程的呢?代码如下。 fn how_to_create_a…

    Java 2023年6月15日
    085
  • 单例模式详解

    单例模式详解 1.1单例模式概述 单例模式(Singleton Pattern)指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点,属于创建型设计模式。 1.2单例模…

    Java 2023年6月7日
    087
  • linux-0.11分析:进程初始化函数init(),第一部分setup((void *) &drive_info) ,第十二篇随笔

    进程的初始化函数, init() 先看看这个函吧: void init(void) { int pid,i; setup((void *) &drive_info); (v…

    Java 2023年6月16日
    081
  • Parallels Desktop 17 for mac(pd虚拟机)Intel专用版中文版

    Original: https://www.cnblogs.com/123ccy/p/16541199.htmlAuthor: -Mac123-Title: Parallels D…

    Java 2023年5月30日
    073
  • RabbitMQ

    一.MQ的相关概念 什么是MQ? Message Queue,消息队列。简单的来说,就是一个先进先出的队列,用来发送消息(信息)。 为什么要用 MQ? 流量消峰:在电商系统中,比如…

    Java 2023年6月7日
    081
  • Nginx几种负载均衡方式介绍

    Nginx几种负载均衡方式介绍 前言 负载均衡就是Nginx将请求分摊到不同的服务器中,保证服务的可用性,缓解服务压力,保证服务的响应速度,即使某一个应用服务不可用,也可以保证业务…

    Java 2023年6月15日
    080
  • 第31章 Spring bean 作用域

    I must say a word about fear. It is life’s only true opponent. Only fear can defeat …

    Java 2023年6月9日
    075
  • 轻松搭建SpringCloudAlibaba分布式微服务

    SpringCloudAlibaba随笔目录 一、SpringCloudAlibaba项目之父工程搭建 二、 SpringCloudAlibaba项目之Nacos搭建及服务注册 三…

    Java 2023年6月5日
    091
  • 日语语法总结九 —- 日语句型

    原文发表时间:2008-09-21 16:26 1.名词句: 今日は日曜日だ。 今天是星期天。 2.形容词句: 日本の夏は蒸し暑い。日本的夏天很闷热。 3.形容动词句: 中国の万里…

    Java 2023年5月30日
    059
  • 6.Hystrix入门

    Hystrix两种命令模式 HystrixCommand和HystrixObservableCommand Command会以隔离的形式完成run方法调用 ObservableCo…

    Java 2023年6月8日
    087
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球