了解冒泡排序

news2024/11/28 14:31:02

1

package com.mypackage.array;

import java.util.Arrays;

public class Demo07 {
    public static void main(String[] args) {
        int[] a = {3,2,6,7,4,5,6,34,56,7};

        int[] sort1 = sort1(a);    //调用我们自己写的排序方法后,返回一个排序后的数组

        System.out.println(Arrays.toString(sort1));     //降序,会输出[56, 34, 7, 7, 6, 6, 5, 4, 3, 2]

        int[] sort2 = sort2(a);    //调用我们自己写的排序方法后,返回一个排序后的数组

        System.out.println(Arrays.toString(sort2));     //降序,会输出[2, 3, 4, 5, 6, 6, 7, 7, 34, 56]

    }

    //冒泡排序
    //1.比较数组中两个相邻的元素,如果第一个数比第二个数大,就交换两个数的位置
    //2.每一次比较,都会产生一个最大或者最小的数字
    //3.下轮就会少一次排序
    //4.一次循环,直到结束

    public static int[] sort1 (int[] array){
        int temp = 0;     //临时变量

        //外层循环,判断我们要走几次
        for (int i = 0; i < array.length-1; i++) {
            //内层循环,比较两个数,如果第一个数比第二个数大则交换位置
            for (int j = 0; j < array.length-1-i; j++) {
                if (array[j+1] > array[j]) {
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }

        return array;
    }

    public static int[] sort2 (int[] array){
        int temp = 0;     //临时变量

        //外层循环,判断我们要走几次
        for (int i = 0; i < array.length-1; i++) {
            //内层循环,比较两个数,如果第一个数比第二个数大则交换位置
            for (int j = 0; j < array.length-1-i; j++) {
                if (array[j+1] < array[j]) {
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }

        return array;
    }
}

优化程序,减少不必要的循环次数:

public static int[] sort3 (int[] array){
    int temp = 0;     //临时变量

    //外层循环,判断我们要走几次
    for (int i = 0; i < array.length-1; i++) {
        boolean flag = false;  
        //内层循环,比较两个数,如果第一个数比第二个数大则交换位置
        for (int j = 0; j < array.length-1-i; j++) {
            if (array[j+1] < array[j]) {
                temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
                flag = true;
            }
        }
        if (flag == false){
            break;
        }
        /*若flag没有变成true,说明没有经历if结构,
        即在一次循环中,各个数都是按顺序排列的,
        也就没有必要再进行下面的循环
        所以break跳出循环*/
    }

    return array;
}

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

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

相关文章

密码学概述

密码学的概念 密码&#xff0c;最初的目的是用于对信息加密&#xff0c;计算机领域的密码技术种类繁多。但随着密码学的运用&#xff0c;密码还被用于身份认证、防止否认等功能上。密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则&#xff0c;变…

5.k8s jenkins集成k8s一键发布案例

文章目录 前言一、jenkins配置1.1 jenkins配置git1.2 jenkins 配置maven1.3 jenkins配置java 二、jenkins流水线配置2.1.新增项目2.2 springboot项目配置git仓库2.3 springboot项目配置maven打包2.4 系统配置 ssh到hadoop1配置&#xff0c;也就是k8s的master节点2.6 springboot…

Handler原理

Handler原理 前言1. Handler作用2. Handler概述3. 核心类 一、Handler源码分析1.创建Handler2.发送消息3.取消息4.消息处理5.线程切换 二、相关内容1.Handler原理2.epoll机制2.1什么是epoll机制&#xff1f;2.2 select/poll/epoll2.3 Handler中epoll是如何实现消息队列的阻塞和…

誉天在线项目~ElementPlus Tag标签用法

效果图 页面展现 <el-form-item label"课程标签"><el-tagv-for"tag in dynamicTags":key"tag"class"mx-1"closable:disable-transitions"false"close"handleClose(tag)"style"margin:5px;">…

解决Custom EmptyStringException: The string is empty

解决Custom EmptyStringException: The string is empty 解决Custom EmptyStringException: The string is empty摘要引言正文1. 理解异常的根本原因2. 处理空字符串问题3. 用户输入验证4. 异常处理 总结参考资料 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&…

gitlab runner 不清理云端已经删除的tag和branch问题记录

在使用gitlab runner的过程中&#xff0c;发现由于git存储限制&#xff0c;不允许在a/b分支后创建a/b/c的分支。所以移除云端a/b分支后创建a/b/c分支。 但是由于gitlab runner出于拉取代码的速度考虑&#xff0c;将本地代码路径做了持久化缓存。 在上述场景中&#xff0c;新建…

Layui + Flask | 实现注册、登录功能(案例篇)(08)

此案例内容比较多,建议滑到最后点击阅读原文,阅读体验更佳。后续也会录制案例视频,将在本周内上传到同名的 b 站账号。 已经看了 layui 表单相关的知识,接下来就可以实现注册功能,功能逻辑如下: 项目创建 新建 flask 项目下载 layui 文件,解压之后复制到指定文件编写前…

算法--选择排序

算法步骤 /*** 选择排序** version 1.0* date 2023/09/01 17:57:05*/ public class Select {/*** 升序选择排序** param a 待排序的数组* date 2023/9/1 15:29:10*/public static void sortAes(int[] a) {//数组长度int length a.length;for (int i 0; i < length-2; i) {…

Web应用开发 - 实训三 B Servlet基础

Web应用开发 - 实训三 B Servlet基础 前言&#xff1a; 零、前期准备准备工具创建项目导入 jar 包配置运行设置 一、实训第一部分第一张图第二张图第三张图 二、实训第二部分第一张图第二张图 前言&#xff1a; eclipse 是不可能用的&#xff0c;并不是说它界面丑&#xff0c;…

Navicat导入Excel数据顺序变了

项目场景&#xff1a; Navicat导入Excel数据 问题描述 从Excel表格中导入数据到数据库中。但是&#xff0c;在导入的过程中&#xff0c;我们常会发现数据顺序出现了问题&#xff0c;导致数据错位&#xff0c;给数据的处理带来了极大的麻烦。 原因分析&#xff1a; 这个问题的…

【CVPR2020】DEF:Seeing Through Fog Without Seeing Fog论文阅读分析与总结

Challenge&#xff1a; 之前网络架构的设计假设数据流是一致的&#xff0c;即出现在一个模态中的对象也出现在另一个模态中。然而&#xff0c;在恶劣的天气条件下&#xff0c;如雾、雨、雪或极端照明条件&#xff0c;多模态传感器配置中的信息可能不对称。不同传感器在特征提取…

第六章 图 八、有向无环图的描述表达式

一、定义 有向无环图: 若一个有向图中不存在环&#xff0c;则称为有向无环图&#xff0c;简称DAG图(Directed Acyclic Graph) 解题方法:

如何将安防视频监控系统/视频云存储EasyCVR平台推流到公网直播间?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

C++ QT qml 学习之 做个登录界面

最近在学习QT&#xff0c;也初探到qml 做ui 的灵活性与强大&#xff0c;于是手痒痒&#xff0c;做个demo 记录下学习成果 主要内容是如何自己编写一个按钮以及qml多窗口。 参考WX桌面版&#xff0c;做一个登录界面&#xff0c;这里面按钮是写的一个组合控件&#xff0c;有 按…

HTTP协议的基本概念与理解!

一、什么是HTTP协议 HTTP&#xff08;超文本传输协议&#xff09;是一个基于请求与响应&#xff0c;无状态的&#xff0c;应用层的协议&#xff0c;常基于TCP/IP协议传输数据&#xff0c;互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷…

Fedora CoreOS 安装部署详解

《OpenShift 4.x HOL教程汇总》 Fedora CoreOS 的裸机安装方法_fedora coreos 安装-CSDN博客 OpenShift 4 - Fedora CoreOS (1) - 最简安装_fedora core 安装_dawnsky.liu的博客-CSDN博客 OpenShift 和 CoreOS 我们知道 Red Hat Enterprise Linux CoreOS&#xff08;简称RHCOS&…

SP2-1503|0152:CMD窗口的SQLPLUS命令无法登录Oracle

场景还原 今天有小伙伴把Oracle卸载后重新安装&#xff0c;尝试以下三种方案均无法登录数据库 1.、在使用PLSQL Developer时&#xff0c;输入账号密码机械能登录操作&#xff0c;弹出空白弹框界面 即没有任何提示错误代码 只有一个白板的框 2、利用自身的SQL PLUS登录直接窗…

【SpringBoot集成Redis + Session持久化存储到Redis】

目录 SpringBoot集成Redis 1.添加 redis 依赖 2.配置 redis 3.手动操作 redis Session持久化存储到Redis 1.添加依赖 2.修改redis配置 3.存储和读取String类型的代码 4.存储和读取对象类型的代码 5.序列化细节 SpringBoot集成Redis 1.添加 redis 依赖 …

运算放大器学习笔记

目录 一、基本定理二、基本定义三、负反馈电路四、同向放大电路五、反向放大电路六、差分放大电路 一、基本定理 【电路示意图】 开环放大公式 VOAvo(V-V-) 开环放大倍数&#xff08;增益&#xff09;非常大&#xff0c;105 或 106 输入阻抗超级大&#xff08;可以理解为电…

辅助驾驶功能开发-控制篇(03)-基于PID的请求角度转扭矩算法

1 文档概述 本文档主要描述请求角度转扭矩的功能、性能要求、算法程序设计,后续可作为程序编程和功能及性能测试参考文档。 2 功能要求 转角扭矩管理(SteeringTorqueManager)将方向盘请求转角转换为电机叠加扭矩,进行横向路径跟踪,并与驾驶员方向盘手感交互,实现自适应调整…