冒泡排序(学习笔记)

news2025/1/29 13:56:56

冒泡排序(基于交换的排序,每一轮确定一个数的位置)

在这里插入图片描述
在这里插入图片描述
哨兵举例:
待排序序列:6 3 1 2 5
第一轮排列:
3 6 1 2 5
3 1 6 2 5
3 1 2 6 5
3 1 2 5 6(最大的数移动到了正确的位置)
第二轮排列:
3 1 2 5 6
1 3 2 5 6
1 2 3 5 6
此时已经有序,如果不加优化,排序算法还会继续,加入“哨兵”即可避免多余算法时间。在这里插入图片描述
在这里插入图片描述

import java.util.Random;

public class BubbleSort {
    //定义常量——数组长度
    public static final int MAXLENGTH = 10;

    public static void main(String[] args) {

        //创建随机数组,数组长度需用户自定义
        int[] bubbleSortArr = createArray(MAXLENGTH);
        //打印创建好的数组(未排好序)
        printArray(bubbleSortArr);
        //排序
        bubbleSort(bubbleSortArr,bubbleSortArr.length);
        //打印排序后的数组
        printArray(bubbleSortArr);


    }
    //创建数组方法(数组中的元素随机生成)
    public static int[] createArray(int length){
        int[] arr =new int[length];
        Random random = new Random();
        for (int i = 0; i < arr.length; i++) {
            arr[i] = random.nextInt(20);//[0,20)
        }
        return arr;
    }
    //打印数组方法
    public static void printArray(int[] arr){
        for (int i=0;i<arr.length;i++) {
           if (i==0){
               if (arr.length==1){
                   System.out.println("["+arr[0]+"]");
               }else{
                   System.out.print("["+arr[i]+",");
               }
           }else if(i==arr.length-1){
               System.out.println(arr[i]+"]");
           }else {
               System.out.print(arr[i]+",");
           }

        }
        System.out.println("--------------------------------------------------------");
    }
    //冒泡排序方法
    public static void bubbleSort(int[] arr,int length){
        //冒泡排序优化————加入“哨兵”
        //flag代表本轮是否有数字进行交换,flag为1代表有,0代表本轮未进行交换,即数组已经按照顺序排序无需进行交换
        int flag = 1;

        while (length--!=0 && flag==1 ){
            flag=0;
            for (int i = 0; i <length; i++) {
                if(arr[i]>arr[i+1]){
                    flag = 1;//如果发生交换 flag=1,while循环继续,否则证明数组已经有序,无需在进行多余的排序
                    //用异或运算(位运算)交换,效率更高——不懂的话,博主有讲解位运算以及交换元素的文章,可以直接点链接或者直接在博主主页搜索
                    arr[i]=arr[i]^arr[i+1];
                    arr[i+1]=arr[i]^arr[i+1];
                    arr[i]=arr[i]^arr[i+1];
                }
            }
        }
    }

}

用异或运算(位运算)交换,效率更高——不懂的话,博主有讲解位运算以及交换元素的文章,可以直接点链接或者直接在博主主页搜索。
1.位运算知识点链接
2.不使用辅助变量交换两个数据的值的方法

运行效果:
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Mall脚手架总结(五) —— SpringBoot整合MinIO实现文件管理

前言 在项目中我们经常有资源的上传和下载的功能需求&#xff0c;比如用户头像、产品图片、配置文件等等&#xff0c;大数据量的文件存储无疑需要更高性能的数据存储服务&#xff0c;对于无需对结构实现复杂查询的文件对象来说&#xff0c;对象存储服务无疑是一个较好的选择&am…

并查集路径压缩

我们来看看如果要是100个数&#xff0c;往20个数的集合合并如何 那么我们应该&#xff0c;把数据量小的集合往数据量大的合并 解决另一种极端场景的路径压缩

限制条件加入构造范围:Gym - 102832L

https://vjudge.net/contest/587311#problem/D 场上列方程求首项&#xff0c;假设是全部加1&#xff0c;然后一部分&#xff08;后缀&#xff09;减去 k 1 k1 k1&#xff0c;就用到了以下两个条件&#xff1a; 但在这两种情况符合情况下&#xff0c;这个条件不一定满足 然后…

【软件测试】 初识软件测试

文章目录 &#x1f334;什么是软件测试&#x1f38b;软件测试和开发的区别&#x1f6a9;软件测试与调试的区别 &#x1f333;软件测试的发展&#x1f384;软件测试岗位&#x1f340;软件测试在不同类型公司的定位&#x1f38d;一个优秀的软件测试人员具备的素质&#x1f332;软…

105AspectRatio调整宽高比组件_flutter

AspectRatio组件 AspectRatio 的作用是根据设置调整子元素 child 的宽高比。 AspectRatio 首先会在布局限制条件允许的范围内尽可能的扩展&#xff0c;widget 的高度是由宽 度和比率决定的&#xff0c;类似于 BoxFit 中的 contain&#xff0c;按照固定比率去尽量占满区域。 …

【Redis】Java Spring操作redis

目录 引入Redis依赖StringRedisTemplate使用String使用List使用Set使用hash使用zset 引入Redis依赖 StringRedisTemplate 此处RedisTemplate是把这些操作Redis的方法&#xff0c;分成了几个类别&#xff0c;分门别类的来组织的。 此处提供的一些接口风格&#xff0c;和原生的Re…

利达卓越:发挥金融力量,促进团队发展

随着中国经济的快速增长和金融改革的逐步深化&#xff0c;我国金融业取得了令人瞩目的发展。作为经济的重要支柱&#xff0c;我国金融业的规模和实力不断扩大&#xff0c;已经成为全球最大的金融市场之一。利达卓越是一支由管理精英组成的团队&#xff0c;专注于金融行业的投资…

Empowering Low-Light Image Enhancer through Customized Learnable Priors 论文阅读笔记

中科大、西安交大、南开大学发表在ICCV2023的论文&#xff0c;作者里有李重仪老师和中科大的Jie Huang&#xff08;ECCV2022的FEC CVPR2022的ENC和CVPR2023的ERL的一作&#xff09;喔&#xff0c;看来可能是和Jie Huang同一个课题组的&#xff0c;而且同样代码是开源的&#xf…

解密人工智能:KNN | K-均值 | 降维算法 | 梯度Boosting算法 | AdaBoosting算法

文章目录 一、机器学习算法简介1.1 机器学习算法包含的两个步骤1.2 机器学习算法的分类 二、KNN三、K-均值四、降维算法五、梯度Boosting算法和AdaBoosting算法六、结语 一、机器学习算法简介 机器学习算法是一种基于数据和经验的算法&#xff0c;通过对大量数据的学习和分析&…

数据结构与算法-(8)---队列(Queue)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

若依 ruoyi 路径 地址 # 井号去除

export default new Router({mode: history, // history 去掉url中的# 、hash 包含#号scrollBehavior: () > ({ y: 0 }),routes: constantRoutes })

嘉立创专业版新建元件

以2*24&#xff08;2mm&#xff09;排母为例 文件-新建-元件 新建器件 填上元件的基本信息&#xff0c;保存 选择库设计 填好参数&#xff0c;生成符号 给元件添加封装 需要先设计一个封装 选择header-V 填写参数&#xff0c;生成符号 保存即可。 再次进入元件的封装管理…

207、SpringBoot 整合 RabbitMQ 实现消息的发送 与 接收(监听器)

目录 ★ 发送消息★ 创建队列的两种方式代码演示需求1&#xff1a;发送消息1、ContentUtil 先定义常量2、RabbitMQConfig 创建队列的两种方式之一&#xff1a;配置式&#xff1a;问题&#xff1a; 3、MessageService 编写逻辑PublishController 控制器application.properties 配…

抖音开放平台第三方代小程序开发,授权事件、消息与事件通知总结

大家好&#xff0c;我是小悟 关于抖音开放平台第三方代小程序开发的两个事件接收推送通知&#xff0c;是开放平台代小程序实现业务的重要功能。 授权事件推送和消息与事件推送类型都以Event的值判断。 授权事件推送通知 授权事件推送包括&#xff1a;推送票据、授权成功、授…

java 基础 IO字符流

1.汉字存储占多少字节&#xff1a; public class IoTest {public static void main(String[] args) {String str "abcd";String str1 "吴危险学java";System.out.println("字符串转为byte数组&#xff1a;" Arrays.toString(str.getBytes())…

C# RestoreFormer 图像修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace 图像修复 {pu…

Python Opencv实践 - 车辆统计(1)读取视频,移除背景,做预处理

示例中的图像的腐蚀、膨胀和闭运算等需要根据具体视频进行实验得到最佳效果。代码仅供参考。 import cv2 as cv import numpy as np#读取视频文件 video cv.VideoCapture("../../SampleVideos/Traffic.mp4") FPS 10 DELAY int(1000 / FPS) kernel cv.getStructu…

【Jenkins使用】Jenkins 与 Git

一、概述 Jenkins 与 Git 的结合使用&#xff0c;可以理解为是 Jenkins 的一个强大之处。为什么要这么说&#xff0c;简要说明一下这个工作模式就能理解&#xff1a; 一个软件项目&#xff0c;开发过程中通常都会使用到一些源码管理工具&#xff0c;来达到团队协作的目的。而 …

C++ --STL

STL STL&#xff08;Standard Template Library,标准模板库&#xff09;STL从广义上分为&#xff1a; 容器&#xff08;container&#xff09;算法 (algorithm)迭代器 (iterator) 容器 和 算法之间通过迭代器进行无缝连接。STL几乎所有的代码都采用模板类或者模板函数 1、ST…

SystemC入门学习-第8章 测试平台的编写

之前的章节&#xff0c;一直把重点放在用SystemC来描述硬件电路上&#xff0c;即如何编写SystemC 的RTL。本章的注意力集中在验证和编写测试平台上。 重点包括&#xff1a; 如何生成时钟信号和激励波形如何编写有响应能力的测试平台如何记录仿真结果 8.1 编写测试平台 测试平…