Java冒泡排序(Bubble Sort)算法实例

news2024/9/24 6:27:28

何为冒泡排序?

冒泡:就像气泡从水中冒出来一样

在冒泡排序中,最小数或最大数取决于您是按升序还是降序对数组进行排序,向上冒泡到数组的开头或结尾。

算法描述:

  1. 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
  3. 针对所有的元素重复以上的步骤,除了最后一个;
  4. 重复步骤1~3,直到排序完成。

 如果两个元素相等,不会再交换位置,所以冒泡排序是一种稳定排序算法。

代码实现:

数组排序

    /*
       对数组a中的元素进行排序
    */
    public static void sort(Comparable[] a){
        for(int i=a.length-1;i>0;i--){
            for(int j=0;j<i;j++){
                //{6,5,4,3,2,1}
                //比较索引j和索引j+1处的值
                if (greater(a[j],a[j+1])){
                    exch(a,j,j+1);
                }
            }
        }
    }

比较v元素是否大于w元素

    private static  boolean greater(Comparable v,Comparable w){
        return v.compareTo(w)>0;
    }
数组元素i和j交换位置
    private static void exch(Comparable[] a,int i,int j){
        Comparable temp;
        temp = a[i];
        a[i]=a[j];
        a[j]=temp;
    }

排序类

    public static void bubbleSort(int[] data) {

        int arrayLength = data.length;

        for (int i = 1; i < arrayLength; i++) {//第i次排序

            for (int j = 0; j < arrayLength - i; j++) {//从索引为j的数开始
                if (data[j] > data[j + 1]) { //相邻元素两两对比
                    int temp = data[j + 1];  // 元素交换
                    data[j + 1] = data[j];
                    data[j] = temp;
                }
            }

            System.out.println("第" + i + "次排序:\n" + java.util.Arrays.toString(data));
        }
    }

完整代码:



	public class BubbleSort {
    public static void bubbleSort(int[] data) {

        	        int arrayLength = data.length;

        	        for (int i = 1; i < arrayLength; i++) {//第i次排序

        	            for (int j = 0; j < arrayLength - i; j++) {//从索引为j的数开始
        	                if (data[j] > data[j + 1]) { //相邻元素两两对比
        	                    int temp = data[j + 1];  // 元素交换
        	                    data[j + 1] = data[j];
        	                    data[j] = temp;
        	                }
        	            }

        	            System.out.println("第" + i + "次排序:\n" + java.util.Arrays.toString(data));
        	        }
        	    }

        	    public static void main(String[] args) {

        	        int[] data = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};

        	        System.out.println("排序之前:\n" + java.util.Arrays.toString(data));

        	        bubbleSort(data);

        	        System.out.println("排序之后:\n" + java.util.Arrays.toString(data));
        	    }
        	}


排序之前:
[3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]
第1次排序:
[3, 38, 5, 44, 15, 36, 26, 27, 2, 46, 4, 19, 47, 48, 50]
第2次排序:
[3, 5, 38, 15, 36, 26, 27, 2, 44, 4, 19, 46, 47, 48, 50]
第3次排序:
[3, 5, 15, 36, 26, 27, 2, 38, 4, 19, 44, 46, 47, 48, 50]
第4次排序:
[3, 5, 15, 26, 27, 2, 36, 4, 19, 38, 44, 46, 47, 48, 50]
第5次排序:
[3, 5, 15, 26, 2, 27, 4, 19, 36, 38, 44, 46, 47, 48, 50]
第6次排序:
[3, 5, 15, 2, 26, 4, 19, 27, 36, 38, 44, 46, 47, 48, 50]
第7次排序:
[3, 5, 2, 15, 4, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
第8次排序:
[3, 2, 5, 4, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
第9次排序:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
第10次排序:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
第11次排序:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
第12次排序:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
第13次排序:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
第14次排序:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
排序之后:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]

Process finished with exit code 0
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/464524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络编程】

1.网络基础&#xff08;见PDF文件&#xff09; file:///D:/0graduate/000%E5%AE%9E%E4%B9%A0%E5%B0%B1%E4%B8%9A/C/webserver/4.1/%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80.pdf 2.协议 UDP协议 TCP协议 源端口号&#xff1a;发送方端口号目的端口号&#xff1a;接收方端口号序…

Dubbo (1)

目录 认识RPC Dubbo 认识RPC RPC是解决不同JVM之间数据调用的一个思想&#xff0c;比如说现在有2台不同的机器&#xff0c;业务代码需要在这2台机器间调用后台业务代码&#xff0c;RPC就可以解决这2台机器业务代码调用的问题&#xff1a; 而RPC实现流程是什么样的呢&#xff…

中文版gpt-最新的人工智能gpt

最新的人工智能gpt 什么是GPT&#xff1f; GPT是一种自然语言处理和语言生成技术&#xff0c;它能够学习和理解自然语言&#xff0c;并生成高质量的文本。GPT是由OpenAI开发的&#xff0c;它采用了最新的深度学习技术&#xff0c;具备了强大的自我学习能力和语言理解能力。它…

Mybatis关联查询【附实战案例】

目录 相关导读 一、Mybatis一对一关联查询 1. 新增持久层接口方法 2. 新增映射文件对应的标签 3. 新增测试方法 4. 运行效果 二、Mybatis一对多关联查询 1. 新增持久层接口方法 2. 新增映射文件对应的标签 3. 新增测试方法 4. 运行效果 三、Mybatis多对多关联查询 …

HCL Nomad Web 1.0.7发布和新功能验证

大家好&#xff0c;才是真的好。 要问在HCL Notes/Domino系列产品中&#xff0c;谁更新得最快&#xff0c;那么答案一定是HCL Nomad Web。 你看上图右边&#xff0c;从1.0.1更新到1.0.7&#xff0c;都没花多少时间。 从HCL Nomad Web 1.0.5版本开始&#xff0c;可以支持直接…

逐浪智能时代,网易数帆“重写”低代码

如今&#xff0c;越来越多行业正驶入数字化转型的深水区&#xff0c;如何彻底释放数据生产力&#xff0c;成为所有企业的一道必答题。 4月25日&#xff0c;“网易数帆低代码业务战略发布会”在线上举行。在发布会上&#xff0c;网易数帆发布了CodeWave智能开发平台&#xff0c…

C#之Class的实例化过程

总目录 文章目录 总目录前言一、class的成员二、实例化顺序&#xff08;无继承情况&#xff09;1.声明时进行初始化2.在构造函数中初始化 三、实例化顺序&#xff08;有继承情况&#xff09;结语 前言 在平常开发的过程中&#xff0c;经常需要new 一个class&#xff0c;但是呢…

平安银行广州分行:以金融赋能慈善 释放更大社会效能

4月8日&#xff0c;平安银行广州分行“为爱徒步 欢乐‘益’起行”活动在广州市白云区钟落潭镇云溪湾新乡村示范带圆满举行。本次活动由平安银行广州分行主办&#xff0c;通过白云区供销合作联社组织&#xff0c;在助农过程中&#xff0c;同时公益捐步&#xff0c;助力建设云溪湾…

gitlab部署及整合Jenkins持续构建(三)sonarqube9.9安装和使用(一步一坑)

文章目录 postgresql13.0安装1、配置postgresql数据库2、进入postgresql创建数据库 代码质量管理平台--sonarqube安装1、前置依赖下载2、安装unzip并解压sonarqube并移动到/usr/local&#xff1a;3、修改sonarqube相应的配置4、新增用户&#xff0c;并将目录所属权赋予该用户&a…

资料链接 网络/系统/华为

网络&#xff1a; 缺省路由 https://www.cnblogs.com/ricksteves/p/9702546.html AC热备 快搜预览中心https://search.ruijie.com.cn:8447/rqs/preview.html?wdeHAiOjE1NDU4NzUxNDcsIm5iZiI6MTU0NTYxNTk0N302018092015272000303LqqZuvMhE7V7Ygl6r5RWsTHbWazT BGP https:…

nextjs 错误日志收集

最近用nextjs开发一款房产渠道管理的系统&#xff0c;从开始的项目管理&#xff0c;到价格单管理、订单管理、团队管理、中介管理、个人信息管理...等等功能越来越多的时候&#xff0c;前端偶现的问题不容易发现&#xff0c;造成了不必要的麻烦&#xff0c;就想搞个错误日志收集…

地理信息系统有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是几本地理信息系统领域的SCI期刊推荐&#xff1a; International Journal of Geographical Information Science: 这是一个国际性的期刊&#xff0c;它涵盖了地理信息科学的所有领域&#xff0c;包括地图学、遥感、空间分析、地理信息系统、地理信息技术、地球信息学等等…

被chatGPT割了一块钱韭菜

大家好&#xff0c;才是真的好。 chatGPT热度一直上升&#xff0c;让我萌生了一个胆大而创新的想法&#xff0c; 把chatGPT嵌入到Notes客户机中来玩。 考虑到我已经下载了一个chatGPT的Notes应用&#xff08;请见《ChatGPT APIs for HCL DOMINO》&#xff09;&#xff0c;想着…

Shell编程之条件语句

目录 一、条件测试 1&#xff09;test命令 ​编辑 2&#xff09;文件测试 常用的测试操作符 ​编辑 4&#xff09;整数值比较 常用的测试操作符 6&#xff09;逻辑测试 常用的测试操作符 7&#xff09;三元运算符 二、if语句 1&#xff09;单分支结构 2&#xff09…

时序预测 | MATLAB实现WOA-GRU鲸鱼算法优化门控循环单元时间序列预测

时序预测 | MATLAB实现WOA-GRU鲸鱼算法优化门控循环单元时间序列预测 目录 时序预测 | MATLAB实现WOA-GRU鲸鱼算法优化门控循环单元时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现WOA-GRU鲸鱼算法优化门控循环单元时间序列预测 基于鲸鱼算法优化门…

必须要知道的hive调优知识(下)

Hive如果不用参数调优&#xff0c;在map和reduce端应该做什么 1、map阶段优化 Map阶段的优化&#xff0c;主要是确定合适的map数。那么首先要了解map数的计算公式 num_reduce_tasks min[${hive.exec.reducers.max}, (${input.size}/${hive.exec.reducers.bytes.per.reducer…

软件测试:测试一个网站

一、软件测试的原则 1、软件测试应尽早执行&#xff0c;并贯穿于整个软件生命周期 2、软件测试应追溯需求 3、测试应由第三方来构造 4、穷举测试是不可能的,要遵循 Good-enough 原则 5、必须确定预期输出&#xff08;或结果&#xff09; 6、必须彻底检查每个测试结果 7、…

常见电路20问,看看你能回答多少

1、什么是电路&#xff1f; 电路是由电子元件、导线和其他元件组成的路径&#xff0c;可以控制电子流的流动。电路可以用于将电能转化为其他形式的能量&#xff0c;例如光能、声能、机械能等等。电路还可以用于控制电子设备的操作&#xff0c;例如计算机、通信设备、车辆控制等…

来字节跳动实习,有机会发Nature子刊

来字节跳动实习&#xff0c;还能有机会发 Nature 子刊&#xff1f; 没错&#xff0c;ByteDance Research 与北京大学物理学院陈基课题组合作的一项研究近期登上了国际顶级刊物 Nature Communications。作者之中&#xff0c;共同一作伟中就是字节跳动的实习生同学&#xff0c;来…