优化冒泡排序

2023-11-09

问题:
给定一个整型数组, 实现冒泡排序 (升序排序)

一般我们写出来的是这个代码:

public static void bubbleSort(int[] array) {
        for(int i = 0;i < array.length -1;i++) {
            if(array[i] > array[i+1]) {
                int temp = array[i];
                array[i] = array[i+1];
                array[i+1] = temp;
            }
        }
    }
    public static void main(String[] args) {
        int[] array = {6,8,13,2,9};
        bubbleSort(array);
        System.out.println(Arrays.toString(array));
    }

这个代码呢,不能说他错,但是呢大家都会写,在面试的时候就体现不出来自己的优势,所以我们需要对这个代码进行优化:

1、第一轮的判断将整个数组的最大值放在了最后面,第二轮的判断是将除过第一次选出的最大值以外的剩余数字中的最大值放在了倒数第二位,我们已经知道从后往前是从大到小的顺序已经排好,所以我们没必要每次都进行最后一个数字和前一个数字的比较,我们可以再加个循环,用来减少判断每次后面已经排好的顺序,只进行前面数字的比较排序即可。

在这里插入图片描述
在这里插入图片描述
第3趟:
在这里插入图片描述
第4趟:
在这里插入图片描述

2、我们需要判断数组是否已经排好序,防止重复比较
分为两种:一就是给定的数组本身就是有序的,二就是数组在排序的过程中就已排好

下面给出我们优化后的代码:

public static void bubbleSort(int[] array) {
        for(int i = 0;i < array.length -1;i++) {
            boolean flg = true;//标记
            for (int j = 0; j < array.length-1-i; j++){
                if (array[j] > array[j + 1]) {
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    flg = false;
                }
            }
            if(flg == true) {
                break; // 说明给定的数组是排好序的数组
            }
        }
    }
    public static void main(String[] args) {
        int[] array = {6,8,13,2,9};
        bubbleSort(array);
        System.out.println(Arrays.toString(array));
    }

运行结果:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

优化冒泡排序 的相关文章

随机推荐

  • ARM下高效C编程

    通过一定的风格来编写 C 程序 可以帮助 C 编译器生成执行速度更快的 ARM 代码 下面就是一些与性能相关的关键点 1 对局部变量 函数参数和返回值要使用 signed 和 unsigned int 类型 这样可以避免类型转换 而且可高效
  • 猫狗数据集

    import numpy as npimport pickleimport cv2import pandas as pdimport tensorflow as tfimport matplotlib pyplot as plt mnist
  • 干货!如何用Python处理图像,一文带你了解!

    大家好 我是菜鸟哥 用Python玩图像处理还是很有意思的 我们以前写过很多这样的文章 学Python真香 我用100行代码做了个网站 帮人PS旅行图片 赚个鸡腿吃 十行代码 我用Python做一个迷你版的美图秀秀 十行Python代码替换
  • 【Kali】kali主要工具使用说明(文末附超全思维导图)

    本文为 从实践中学习Kali Linux渗透测试 总结笔记 仅供学习使用 禁止用于非法用途 转载请附上原文链接 1 信息收集 1 1 发现主机 traceroute 获取目标主机的路由条目 确定网络拓扑 每一跳表示一个网关 星号可能为防火墙
  • JAVA-面向对象

    面向对象编程与面向过程编程只是一种在思维方式上的划分 面向过程是以分步骤的方式解决问题 而面向对象是以分步骤的方式解决问题 面向对象的三大特性是 封装 继承 多态 封装 就是将客观事物封装成抽象的类 抽象类可以将自己的数据和方法只让自己信任
  • Kotlin中枚举

    一 写一个Kotlin的枚举 package net println kotlin chapter4 author wangdong description enum class LogLevel VERBOSE DEBUG INFO WA
  • 手语识别 机器学习_手语识别研究综述.PDF

    手语识别研究综述 PDF 第 7 卷第 3 期 信息技术快报 Vol 7 No 3 Information Technology Letter May 2009 手语识别研究综述 张良国 陈熙霖 摘 要 本文综述了手语识别领域近年来的研究热
  • 多个.C和.H文件的相互调用以及变量的跨文件使用

    假如 有一个头文件 1 h 和源文件1 c 还有一个头文件 2 h和源文件2 c 函数的调用 假如 有一个函数 在1 h 中声明 void xuexi void 在1 c中实现 先包含 include 1 h void xuexi void
  • Follow your heart(180)---tmd的 那些各种D文档

    我4月去杭州 找好友谈一起做的事情 她推荐了一个人加入 然后要我写什么PRD 我才知道 那叫产品需求文档 可是 我有啊 只是我直接就加了很多设计进去 不是完全把自己作为客户的 好友发了一个他们公司的PRD文档 那是一个非互联网产品的产品 是
  • 解决LoggerFactory is not a Logback LoggerEither remove Logback or the competing implementation (class

    一个项目引入了amqp以后报错 疑似包冲突 最后利用dependency analyzer终于解决了 问题 原依赖
  • 不知道如何入门Kotlin?《Android版kotlin协程入门进阶实战》带你从入门,带你飞

    作为一名 Android 开发者 掌握 Kotlin 语言对于职业发展具有重要意义 随着 Google 正式将 Kotlin 确立为 Android 开发的官方编程语言 Kotlin 的地位在 Android 开发领域迅速攀升 因此 仅仅依
  • linux系统输入指令,Linux系统基础 - 基本操作命令

    原标题 Linux系统基础 基本操作命令 首先介绍一个名词 控制台 console 它就是我们通常见到的使用字符操作界面的人机接口 例如dos 我们说控制台命令 就是指通过字符界面输入的可以操作系统的命令 例如dos命令就是控制台命令 我们
  • QRemoteObject在多进程间通讯的实现方法

    QRemoteObject是qt进程间通讯特有的方式 实现了在进程间通过信号槽的方式来编程的方式 省去了很多的麻烦 比如采用共享内存的方式 得考虑数据同步问题 用qt的方式去解决 才能体现qt的优势 通过分析 QRemoteObject底层
  • [WinForm]关于InvokeRequired与Invoke

    Windows 窗体中的控件被绑定到特定的线程 不具备线程安全性 因此 如果从另一个线程调用控件的方法 那么必须使用控件的一个 Invoke 方法来将调用封送到适当的线程 该属性可用于确定是否必须调用 Invoke 方法 当不知道什么线程拥
  • node npm cnpm vue 搭建环境过程

    一 使用之前 我们先来掌握3个东西是用来干什么的 npm Nodejs下的包管理器 webpack 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备 比如资源的合并和打包 vue cli 用户生成Vue工
  • ctfshow web入门——web8

    提示和上一题一样 但是访问 git没有flag出来 所以使用另一个版本控制工具svn 访问获得flag
  • HBase RegionServer功能职责

    RegionServer功能职责 租约管理 HBase的租约管理功能主要应用在scan查询上 如果客户端执行scan操作以后 在60秒内没有将Scanner进行关闭 也没有显示的将租约移除 这时查询租约将会过期 RegionServer会强
  • VITS训练自己的AI歌手

    最近大火的AI孙燕姿真是好玩 大佬们把训练工作做成了集成包 不用配环境 上手即用 跟着大佬训练了自己喜欢的Leslie 顺便写一下笔记 喜欢的可以参考 最后一章附上大佬们的视频链接和文章链接 So VITS SVC 4 0训练自己的AI歌手
  • ARM指令集

    ARM指令的基本格式 ARM指令的基本格式为
  • 优化冒泡排序

    问题 给定一个整型数组 实现冒泡排序 升序排序 一般我们写出来的是这个代码 public static void bubbleSort int array for int i 0 i lt array length 1 i if array