冒泡排序BubbleSort

2023-11-01

       冒泡排序是一种时间复杂度为O(n²)的排序算法,一般情况下算是最慢的排序算法了。不过相对比较好理解属于入门级算法。实现思想很简单就是两个双层循环,挨个元素进行比较如果内层循环的位置比外层循环小(大)则进行位置交换,否则向后查找直到循环完毕,下面是一个基础的实现。

    public static void sort(Comparable[] array) {
        for (int i = 0; i < array.length; i++) {
            for (int j = i; j < array.length; j++) {
                if (array[j].compareTo(array[i]) < 0) {
                    Comparable temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
    }

       冒泡排序相比其他同级别的排序比如插入排序选择排序速度较慢,主要原因是缺乏提前结束循环的条件。只能将最大层级n²执行完毕,所以可以根据这一点进行优化增加结束条件。

    public static void sort(Comparable[] array) {
        int len = array.length;
        boolean flag = true;

        while (flag){
            flag = false;
            for (int i = 1; i < len; i++) {
                if(array[i].compareTo(array[i-1]) < 0){
                    Comparable temp = array[i];
                    array[i] = array[i-1];
                    array[i-1] = temp;
                    flag = true;
                }
            }
            len -- ;
        }
    }
        先把大的数字排序到最后这样每次就能减少一次循环次数。如果有一次没有进行交换,则表示剩下的数字都是大小有序的,排序提前结束。

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

冒泡排序BubbleSort 的相关文章

  • 2016腾旭研发工程师笔试题

    用C C 代码算出满足上述条件的值 我们首先来分析一下 step0 我们可以得到如下方程 step1 由方程 1 3 6 可得 我们可以把x1 x5 x6看成自变量 x2 x8 x7看成对应的函数 这样只要x1 x5 x6确定了 x2 x8
  • 《算法学习》C语言中“ const * “与“ * const “区别总结

    一 简介 最近重新学习了C语言中的指针 本文总结一下C语言中使用 的心得 二 总结 const 表示指针变量是constant 恒定的 不允许通过访问指针地址的方式改变指针所指地址的的值 const 表示该指针是恒定的 即该指针不能再指向别
  • 刷题之01 矩阵

    给定一个由 0 和 1 组成的矩阵 mat 请输出一个大小相同的矩阵 其中每一个格子是 mat 中对应位置元素到最近的 0 的距离 两个相邻元素间的距离为 1 示例 1 输入 mat 0 0 0 0 1 0 0 0 0 输出 0 0 0 0
  • 【算法导论学习】分治法求最大子数组

    最大子数组 分治法 问题分析方向 对时间复杂度的分析 样例分析 问题分析 分解问题 解决问题 合并问题 对代码的设想 中间部分的处理 递归部分 时间复杂度分析 完整代码 分治法 所谓分治法 就是把问题不断分割变小 常见的是把数组分割为两部分
  • 刷题之77. 组合

    题目 给定两个整数 n 和 k 返回范围 1 n 中所有可能的 k 个数的组合 你可以按 任何顺序 返回答案 示例 1 输入 n 4 k 2 输出 2 4 3 4 2 3 1 2 1 3 1 4 来源 力扣 LeetCode 链接 http
  • 算法:单调队列

    队列 先进先出 题型 滑动窗口 求滑动窗口里的最大 或最小 值 例1 P1886 滑动窗口 模板 单调队列 求滑动窗口里的最大小值 include
  • PID算法的理论分析

    PID算法的理论和应用 PID算法基本原理 PID算法的离散化 PID算法伪代码 PID算法C 实现 pid cpp pid h pid example cpp Python代码 仿真结果 PID算法基本原理 PID算法是控制行业最经典 最
  • 极坐标转化

    在数学中 极坐标系是一个二维坐标系统 该坐标系统中任意位置可由一个夹角和一段相对原点 极点的距离来表示 极坐标系的应用领域十分广泛 包括数学 物理 工程 航海 航空以及机器人领域 两点间的关系用夹角和距离很容易表示时 极坐标系便显得尤为有用
  • 字典排序算法(通俗易懂)

    我们先看一个例子 示例 1 2 3的全排列如下 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 我们这里是通过字典序法找出来的 那么什么是字典序法呢 从上面的全排列也可以看出来了 从左往右依次增大 对这就是字典序法
  • 刷题之图像渲染

    有一幅以二维整数数组表示的图画 每一个整数表示该图画的像素值大小 数值在 0 到 65535 之间 给你一个坐标 sr sc 表示图像渲染开始的像素值 行 列 和一个新的颜色值 newColor 让你重新上色这幅图像 为了完成上色工作 从初
  • 旋转图像(二维数组的旋转)——LeetCode数组算法题

    旋转图像
  • 刷题之合并二叉树

    给定两个二叉树 想象当你将它们中的一个覆盖到另一个上时 两个二叉树的一些节点便会重叠 你需要将他们合并为一个新的二叉树 合并的规则是如果两个节点重叠 那么将他们的值相加作为节点合并后的新值 否则不为 NULL 的节点将直接作为新二叉树的节点
  • TS实现排序算法之选择排序

    选择排序算法 每次从待排序序列中找出最大值或最小值 查找过程重复 n 1 次 对于每次找到的最大值或最小值 通过交换元素位置的方式将它们放置到适当的位置 最终使整个序列变成有序序列 升序排列时 每次查找待排序序列中的最小值的位置 然后交换位
  • Shapley Values

    今天来学习一下Shapley Values 先上概念 以及研究背景 borrowed from Wikipedia The Shapley value is a solution concept in cooperative game th
  • 二叉树——求两个节点的最近公共祖先

    题目 给定一颗二叉树的头结点 和这颗二叉树中2个节点n1和n2 求这两个节点的最近公共祖先 思路 利用后序遍历实现 对于当前节点cur 如果节点为null或者等于n1或n2中的一个 则直接返回cur 先处理左右子树 左子树返回left 右子
  • 【二维费用的完全背包问题】

    前言 简单写一下算法设计与分析这门课的一次实验 原题要求是用0 1背包来做 但是老师要求用完全背包来做 一 完全背包与0 1背包有什么区别 0 1背包 顾名思义对于每件物品只能拿1次或者0次 而完全背包对于每件物品的拿取没有次数限制 二 二
  • 代码随想录一刷-Day01

    代码随想录一刷 Day01 LeetCode704 二分查找 这道属于是入门必刷了 但是虽然能做出来 在细节上还是不够注意 public int search int nums int target if nums null nums le
  • 刷题之二分查找

    题目 给定一个 n 个元素有序的 升序 整型数组 nums 和一个目标值 target 写一个函数搜索 nums 中的 target 如果目标值存在返回下标 否则返回 1 来源 力扣 LeetCode 链接 https leetcode c
  • 贪心(acwing)

    每次选择当前的最优解 没什么固定的套路 先试一些做法 举例子验证 尝试证明一下 严格地推 区间问题 例1 1 将每个区间按照右端点从小到大排序 2 从前往后依次枚举每个区间 如果当前区间已经包含点 则直接pass 否则选择当前区间的右端点
  • 《算法图解》——第八章 贪婪算法

    第八章 贪婪算法 1 简单的贪婪算法 每步都采取最优的做法 每步都选择局部最优解 2 背包问题 有些情况下 完美是优秀的敌人 如果你只需要找到一个大致解决问题的算法 贪婪算法挺不错 因为实现容易 结果与正确结果相当接近 练习8 1 你在一家

随机推荐

  • LAMPSECURITY: CTF8-20220522

    LAMPSECURITY CTF8 可以参考博文 https blog csdn net LZHPIG article details 104456327 About Release Back to the Top Name LAMPSec
  • Token的组成部分

    token是计算机术语 令牌 令牌是一种能够控制站点占有媒体的特殊帧 以区别数据帧及其他控制帧 token其实说的更通俗点可以叫暗号 在一些数据传输之前 要先进行暗号的核对 不同的暗号被授权不同的数据操作 使用基于 Token 的身份验证方
  • 测试必备SQL语句

    测试必备SQL语句 测试必备SQL语句 sql语法要点 多表查询 左连接及更新 增删改查 子查询 连接和组合 组合UNION 函数 排序与分组 测试必备SQL语句 sql语法要点 SQL 语句不区分大小写 但是数据库表名 列名和值是否区分
  • Linux--文件压缩、解压命令

    1 tar 打包或者解包 tar cvf xxx tar 打包好 的名字 需要打包的所有文件名 2 gzip 压缩或者解压 压缩 gzip 打包的名字 例如 gzip mytar tar 解压 gzip d xxx tar gz 例如 gz
  • 创建csv文件实例

    创建一个csv格式数据 作者 Jack Lin 日期 2016 12 6 备注 该方法只是要整一个csv文件下载实例 function make csv header Content Type application vnd ms exce
  • 个人对几个IDE的看法

    说明 本文仅表达个人看法 实际上文中的几个IDE功能不同 不能互相取代 截图上的程序均已发布 个人认为一款IDE在功能完整的前提下 应当做到操作简便 另外 对缩放的兼容性也会影响观感 以下对本人用过的几款IDE进行分析 1 Visual S
  • 华为OD机试 - 战场索敌(Java)

    题目描述 有一个大小是N M的战场地图 被墙壁 分隔成大小不同的区域 上下左右四个方向相邻的空地 属于同一个区域 只有空地上可能存在敌人 E 请求出地图上总共有多少区域里的敌人数小于K 输入描述 第一行输入为N M K N表示地图的行数 M
  • 奇怪的登录问题及解决

    最近新建了好几个测试库 有一个库在过了一段时间之后 出现了很奇怪的问题 有时候能够登录 有时候又登不上 通过sqlplus登录 报错如下 gt sqlplus n1 n1 testhost1 SQL Plus Release 11 2 0
  • Python每日一练第3天——按要求实现程序功能

    按要求实现程序功能 每日一练 做题 1 定义一个函数prime判断某个整数是否为素数 2 然后从键盘输入一行字符串 将其中的连续数字依次提取出来形成一个列表 例如 字符串 ab12cd34fg67 按要求提取后形成列表 12 34 67 3
  • 突如其来的久违的WPF学习(3)

    如何设置C 中queue为固定长度 已知queue的存储规则为先进先出 最终的解决方法为设计一个固定长度的队列类 然后接口设置为数据长度 目前唯一的问题是这样就好像不知道怎么不定义队列的内容了 之所以需要重新包装是因为queue自带的队列长
  • OpenAI 发布 GPT-4,有哪些技术上的优化或突破?

    GPT 4 这是 OpenAI 努力扩展深度学习的里程碑 GPT 4 是一个大型多模态模型 接受图像和文本输入 发出文本输出 虽然在许多现实世界场景中的能力不如人类 但在各种专业和学术基准上表现出人类水平的表现 例如 它通过模拟律师考试 分
  • js 导出excel表格时身份证或数字过长会出现科学计数法

    问题描述 js在导出excel表格时身份证或数字过长会出现科学计数法 如E 13等 问题解决 td data t td 重点 style mso number format
  • json可视化在vue应用中的实现

    实现效果 json可视化化 代码 1 首先先下载好JsonView的组件 JsonView vue 组件代码如下
  • KVM-1、Linux 操作系统及虚拟化

    1 前言 一台计算机是由一堆硬件设备组合而成 在硬件之上是操作系统 操作系统与计算机硬件密不可分 操作系统用来管理所有的硬件资源提供服务 各个硬件设备是通过 总线 进行连接起来的 在操作系统之上 需要一个人机交互接口 我们才能使用计算机对其
  • 使用vue-cli脚手架工具搭建vue工程项目以及配置路由

    vue cli是用node编写的命令行工具 我们需要进行全局安装 打开命令行终端 输入如下命令 1 npm install g vue cli 这里使用的是npm 为了开发的便利 推荐安装cnpm 这样运行指令会更迅速 安装命令如下 1 n
  • 使用python对接海康威视的ISC(iSecureCenter)平台

    使用python如何对接ISC平台 获取视频 门禁 停车场等业务数据 步骤如下 1 登录海康的开放平台网站 open hikvision com 查看对接指南 2 正式开始编码 python导入jar包依赖库 需要导入ISC平台的安全认证库
  • C语言程序设计--综合训练20个任务

    程序设计综合训练 任务书 课程设计的意义 程序设计综合训练是电子信息工程 通信工程的专业实践课 属于专业必修课 作为一门程序设计语言 通过学习 掌握基本语法和一些常用函数 掌握程序设计的基本思想 熟悉常用的算法与编程技巧 掌握一般的排错能力
  • Excel VBA 提示“找不到工程或库”错误的解决办法

    前不久用Excel VBA给采购部做了个 供销存管理系统 结果在采购部的电脑上运行出现 找不到工程或库 的错误 一般情况下 出现此错误是因为找不到引用工程 或找不到与工程语言对应的引用的对象库 还有就是安装Office精简版也会出现此类错误
  • 卷积神经网络原理介绍

    1 人工神经网络 1 1 神经元 神经网络由大量的神经元相互连接而成 每个神经元接受线性组合的输入后 最开始只是简单的线性加权 后来给每个神经元加上了非线性的激活函数 从而进行非线性变换后输出 每两个神经元之间的连接代表加权值 称之为权重
  • 冒泡排序BubbleSort

    冒泡排序是一种时间复杂度为O n 的排序算法 一般情况下算是最慢的排序算法了 不过相对比较好理解属于入门级算法 实现思想很简单就是两个双层循环 挨个元素进行比较如果内层循环的位置比外层循环小 大 则进行位置交换 否则向后查找直到循环完毕 下