Java实现冒泡排序

2023-10-27

冒泡排序(基础版本)

//冒泡(两轮循环,外层表示第几轮冒泡,内层表示两两比较)
    public static void bubble(int[] a){
        //冒泡轮次
        for (int j = 0; j < a.length - 1; j++){
            //两两比较
            for (int i = 0; i < a.length -j -1; i++){
                if(a[i] > a[i + 1]){
                    swap(a, i, i+1);
                }
            }
        }
    }  

冒泡排序(优化版)

/*优化版本
(判断本轮冒泡是否发生了交换,
    如果没有发生交换则说明集合已经有序,不再需要后面的冒泡)*/
    public static void bubble_v2(int[] a){
        for (int j = 0; j < a.length - 1; j++){
            boolean swapped = false;//是否发生了交换
            for (int i = 0; i < a.length -j -1; i++){
                if(a[i] > a[i + 1]){
                    swap(a, i, i+1);
                    swapped = true;
                }
            }
            if(!swapped){
                break;
            }
        }
    } 

冒泡排序(最终版本)

/*最终优化本
    (记录最后一次交换索引last的位置,
    last之后的索引都是有序的不再需要两两判断,
    当last==0时说明集合已经有序)*/
    public static void bubble_v3(int[] a){
        int n = a.length - 1;
        while (true){
            int last = 0;//表示最后一次交换索引的位置
            //只比较最后一次交换索引之前的元素
            for(int i = 0; i < n; i++){
                if(a[i] > a[i + 1]){
                    swap(a, i, i+1);
                    last = i;
                }
            }
            n = last;
            if(n == 0){
                break;
            }
        }
    }

实现思路

以升序为例

  • 1,依次比较数组中相邻两个元素大小,若a[j] > a[j+1],则交换两个元素,两两都比较一遍称为一轮冒泡,结果是让最大的元素排至最后。
  • 2,优化方向:可每轮冒泡时,最后一次交换索引可以作为下一轮冒泡的比较次数,如果这个值为零,表示整个数组有序则直接退出外层循环。

附上swap()交换方法

/**
     * 交换元素
     * @param a 数组
     * @param i 索引i
     * @param j 索引j
     */
    public static void swap(int[] a, int i, int j){
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java实现冒泡排序 的相关文章

随机推荐

  • cmake建立自己的package

    通过cmake建立自己的package cmake提供了CMakePackageConfigHelpers来方便实现我们的需求 详细文章参考如下 1 https blog csdn net xiaoxiaozengz article det
  • go协程、管道

    请感受一下协程的强大 使用了管道序列 package main import fmt time 创建一个管道 用于写入数据 func writeChantest writeChan chan int for i 0 i lt 20 i wr
  • ISO 26262:保障驾驶安全的汽车功能安全标准

    来源 中豪认证 随着汽车科技的迅猛发展 越来越多的电子系统和功能被引入汽车中 为驾驶体验和安全性带来了巨大的改进 然而 这些复杂的电子系统也带来了潜在的风险和安全挑战 为了确保现代汽车在各种情况下的安全性 国际标准化组织于2011年发布了I
  • 实现浏览页面时校验用户是否已经完成登录的功能

    一 实现原理 实现步骤 1 创建自定义过滤器LoginWebFilter java 2 在启动类上加入注解 ServletComponentScan 用来扫描web相关的注解 3 完善过滤器的处理逻辑 二 代码实现 首先在main java
  • 关于Xilinx下载器驱动安装及常见问题解决方法

    PC操作系统平台 Win7x64 ISE14 4 ISE14 7 下载器工作状态指示灯说明 如果Xilinx的下载器与电脑连接之后 下载器上面的指示灯不亮 说明PC上安装的下载器驱动有问题或者是下载器坏掉了 如果下载器与电脑连接之后 并与开
  • CTFshow 每日一练

    一 web签到题 打开链接 查看源码 利用base64解码得到flag 二 web2 看到有提示 SQL注入 先试着使用万能密码登陆 发现有回显 直接sql注入 or 1 1 order by 3 发现到4时不回显 开始爆库名 看看哪个位置
  • 2、ubuntu18.04安装cmake

    本文以安装cmake3 18 0为例 1 获取安装包 wget https cmake org files v3 18 cmake 3 18 0 Linux x86 64 tar gz 2 解压压缩包 tar zxvf cmake 3 18
  • GD32F3x0 USB CDC应用案例

    GD32F3x0 USB CDC应用 本文有点长 描述了从0开始移植驱动到应用的过程和思路 准备工作 因项目需求这两天需要做个USB的虚拟COM口发卡器 实现双向通讯 由于功能较为简单我们选择GD32F350来开发 先跑跑官方例程 GD32
  • 分享程序员在囧途网站

    不知不觉的在博客园看到了失业的程序员系列文章 我就带着好奇的看了几章 然后发现类似创业的文章的经历的文章 都是程序员爱看到的文章 同时把这样的经历加上一点修饰 是很多程序员喜欢的话题 也是程序员想看到的文章 不知道不觉到了第六章的时候 文章
  • LayUI数据表格 通用工具栏 分页+搜索+排序

    完成效果 1 接收和展示后端接口传来的数据 2 分页和跳页 设置每页的数量 3 工具栏 查看 修改 删除 4 工具栏 筛选列 导出Excel 打印 5 搜索功能 6 后端排序功能 本实例只展示了实现功能的必须代码 后端代码的非必须部分未贴出
  • 第十三届蓝桥杯 ——刷题统计

    题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛 他计划周一至周五每天做 a a a 道题目 周六和周日每天做 b b b 道题目 请你帮小明计算 按照计划他将在第几天实现做题数大于等于
  • 【C++】 STL库list容器

    STL库list容器 1 list中的构造函数 2 begin 和end list 容器的iterator 3 增 3 1 push back 末端插入 3 2 push front 头部插入 3 3 insert 在指定位置插入n个元素
  • android:checkBox的监听

    CheckBox cb project CheckBox findViewById R id cb project cb project setText 测试是否被选中 cb project setOnCheckedChangeListen
  • [源码和文档分享]基于Keras和tensorflow深度学习Python实现的支持人脸识别和情绪分类的社区APP网站和微信小程序...

    1 项目介绍 1 1 背景 视觉使人类得以感知和理解周边的世界 人的大脑皮层大约有 70 的活动在处理 视觉相关信息 计算机视觉即通过电子化的方式来感知和理解影像 以达到甚至超 越人类视觉智能的效果 从 1966 年学科建立 MIT The
  • Xtrabackup实现数据的备份与恢复

    目录 Xtrabackup实现数据的备份与恢复 Xtrabackup介绍 Xtrabackup优点 Xtrabackup备份原理 Xtrabackup增量备份介绍 Xtrabackup安装 创建测试数据 Xtrabackup全量备份与恢复
  • 14.【Linux】如何在ubuntu18.04下安装Firefox中国版解决Ubuntu与Windows下Firefox账号同步问题(已解决)

    一 下载最新版本火狐Linux版 下载地址 http firefox com cn download 选择火狐Linux64 bit版 下载后文件为 Firefox latest x86 64 tar bz2 二 首先卸载自带的国际版火狐浏
  • 华为-判断两个IP是否属于同一子网

    java实现 问题 题目描述 子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据 子网掩码与IP地址结构相同 是32位二进制数 其中网络号部分全为 1 和主机号部分全为 0 利用子网掩码可以判断两台主机是否中同一子网中 若两
  • VMware虚拟机怎么用U盘装win7系统

    VMware Workstation虚拟机可以在一台电脑上模拟运行多种不同的操作系统 实现与实际电脑完全一样的操作 包括读取U盘 连接网络等 很多用户想用U盘启动盘给VMware安装win7系统 但是不知道怎么操作 本文系统城小编就教大家在
  • Unity 手机触屏事件

    Unity 触屏操作 当将Unity游戏运行到IOS或Android设备上时 桌面系统的鼠标左键可以自动变为手机屏幕上的触屏操作 但如多点触屏等操作却是无法利用鼠标操作进行的 Unity的Input类中不仅包含桌面系统的各种输入功能 也包含
  • Java实现冒泡排序

    冒泡排序 基础版本 冒泡 两轮循环 外层表示第几轮冒泡 内层表示两两比较 public static void bubble int a 冒泡轮次 for int j 0 j lt a length 1 j 两两比较 for int i 0