Java数组06:冒泡排序

news2024/9/20 17:44:31

  本节内容视频链接:Java数组08:冒泡排序_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV12J41137hu?p=58&vd_source=b5775c3a4ea16a5306db9c7c1c1486b5       冒泡排序是一种简单的排序算法,‌它重复地遍历要排序的数列,‌一次比较两个元素,‌如果它们的顺序错误就把它们交换过来。‌遍历数列的工作是重复进行的,‌直到没有再需要交换的元素为止,‌这意味着数列已经排序完成。‌冒泡排序的名字是因为较小或较大的元素会经过交换慢慢“浮”到数列的顶端。‌

以下是Java中实现冒泡排序的示例代码:‌

package array;

import java.util.Arrays;

public class ArrayDemo05 {
    public static void main(String[] args) {
        int[] a = {15,2,3,4,1,3,5,6,7,8,9,12};
        sort(a);
        System.out.println(Arrays.toString(a));
    }
    public static void sort  (int[] array){
        int temp;
        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;
                 }
            }
        }
    }
}

上面代码中假设有一个数组 int[ ] a = {15,2,3,4,1,3,5,6,7,8,9,12};,‌我们想要将它排序。‌

  1. 比较相邻的元素。‌如果第一个比第二个大,‌就交换他们两个。‌
  2. 对每一对相邻元素做同样的工作,‌从开始第一对到结尾的最后一对。‌这步做完后,‌最后的元素会是最大的数。‌
  3. 针对所有的元素重复以上的步骤,‌除了最后一个。‌
  4. 持续每次对越来越少的元素重复上面的步骤,‌直到没有任何一对数字需要比较。‌

通过这个过程,‌数组int[ ] a 将被排序为[1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 12, 15]。

1.如何优化冒泡排序?

设置标志位‌:‌在排序过程中设置一个标志位flag,‌用于判断元素是否进行过交换。‌如果在一趟排序中没有进行过交换,‌就说明序列已经有序,‌可以直接结束排序,‌从而减少不必要的比较。

实现代码如下:

package array;

import java.util.Arrays;

public class ArrayDemo05 {
    public static void main(String[] args) {
        int[] a = {15,2,3,4,1,3,5,6,7,8,9,12};
        sort(a);
        System.out.println(Arrays.toString(a));
    }
    public static void sort  (int[] array){
        int temp;
        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;//如果元素交换过,flag为true,继续循环下一轮
                 }
            }
            if (!flag){ //如果上一轮数组元素没有交换过,flag为false,就说明序列已经有序,‌可以直接结束排序,‌从而减少不必要的比较。
                break;
            }
        }
    }
}

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

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

相关文章

day37动态规划+三.Github链接本地仓库

一.动态规划 474.一和零 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子集 。 思路:这道题更像是另一种的0-…

Linux编辑器gcc/g++使用及Vim的配置

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 &#x1f308;C专栏&#xff1a;C 文章目录 1.简单的vim配置1.1 配置文件的位置1.2 常用配…

20 Tkinter Spinbox 组件

Tkinter Spinbox 组件使用指南 Tkinter 的 Spinbox 组件是一个带有上下箭头的输入框&#xff0c;允许用户通过点击箭头来增加或减少数值&#xff0c;或者从下拉列表中选择一个值。它通常用于需要限制用户输入范围的场景。以下是对 Spinbox 组件的详细说明和一个使用案例。 Sp…

linux文件——用户缓冲区——概念深度探索、IO模拟实现

前言&#xff1a;本篇文章主要讲解文件缓冲区。 讲解的方式是通过抛出问题&#xff0c; 然后通过分析问题&#xff0c; 将缓冲区的概念与原理一步一步地讲解。同时&#xff0c; 本节内容在最后一部分还会带友友们模拟实现一下c语言的printf&#xff0c; fprintf接口&#xff0c…

前端面试题 webpack的工作流程

一、流程图 二、重要概念 1.entry入口&#xff1a; Webpack 从配置的入口点开始&#xff0c;分析应用程序的依赖关系 2.output出口&#xff1a; 定义了打包后的文件如何输出&#xff0c;包括文件名和输出路径。 3.loader加载器&#xff1a; Webpack 本身只能处理 JavaScr…

2024 Python3.10 系统入门+进阶(六):random模块常用方法以及元组常用操作详解

目录 一、random模块1.1 random模块快用导航1.2 choice()方法---从非空序列中返回一个随机元素1.3 choices()方法---返回序列的随机元素1.4 randint()方法---获取指定范围的随机整数1.5 random()方法---获取0.0~1.0范围内随机浮点数1.6 randrange()方法---获取指定范围的随机整…

ArcGIS Pro基础:如何将数据和引用地图样式一起打包分享

如上所示&#xff0c;有2个矢量图斑&#xff0c;一个是耕地地块&#xff0c;另一个是范围图斑&#xff0c;如果我们需要把此工程的所有数据以及引用地图一起分享给别人&#xff0c;就可以使用【打包工程】这个工具。 如上所示&#xff0c;在【地理处理】下输入【打包工程】&am…

Excel的使用总结1

目录 1、汇总公式&#xff1a;TEXTJOIN 2、excel中选择某个区域的方法 3、excel中如何在复制的时候&#xff0c;不将公式一起复制过去 4、想要自动填充某个区域的值的方法 1、汇总公式&#xff1a;TEXTJOIN TEXTJOIN 函数 - Microsoft 支持 例&#xff1a;TEXTJOIN("…

Java数组07:稀疏数组

本节内容视频链接&#xff1a; https://www.bilibili.com/video/BV12J41137hu?p59&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p59&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 稀疏数组&#xff08;‌sparse …

[SWPUCTF 2023 秋季新生赛]UnS3rialize

[SWPUCTF 2023 秋季新生赛]UnS3rialize 点开之后得到一串php代码&#xff1a; <?php highlight_file(__FILE__); error_reporting(0); class NSS {public $cmd;function __invoke(){echo "Congratulations!!!You have learned to construct a POP chain<br/>&q…

CDGA|数据治理为企业赋能价值的几种形式

在当今这个数据驱动的时代&#xff0c;数据已成为企业最宝贵的资产之一&#xff0c;而数据治理作为确保数据质量、安全性、合规性和可访问性的关键过程&#xff0c;正逐步成为企业转型升级、提升竞争力的核心驱动力。数据治理不仅关乎技术层面的优化&#xff0c;更是企业战略实…

【C++ Primer Plus习题】2.5

问题: 解答: #include <iostream> using namespace std;#define CEL_TO_FAH(c) 1.8*c32.0float celToFah(float value) {float fahrenheit CEL_TO_FAH(value);return fahrenheit; }int main() {float celsius 0;cout << "请输入一个摄氏温度的值:";ci…

ARM——驱动——内核编译

一、内核的介绍 Linux内核是Linux操作系统的核心内容&#xff0c;它负责管理系统的硬件资源&#xff0c;并为上层的应用程序提供接口。&#xff08;在上文都有所介绍&#xff09; 功能&#xff1a; 进程管理&#xff1a;内核负责创建、调度、同步和终止进程。它还管理进程间的…

linux应用编程--网络编程(socket编程基础)

介绍&#xff1a;套接字&#xff08;socket&#xff09;是 Linux 下的一种进程间通信机制&#xff08;socket IPC&#xff09;&#xff0c;在前面的内容中已经给大家提到过&#xff0c; 使用 socket IPC 可以使得在不同主机上的应用程序之间进行通信&#xff08;网络通信&#…

Python(PyTorch)多语言图像感知质量指标算法

&#x1f3af;要点 &#x1f3af;算法实现&#xff1a;&#x1f58a;PyTorch单尺度和多尺度质量指标算法 | &#x1f58a;C单尺度质量指标算法 | &#x1f58a;Rust多尺度质量指标算法 | &#x1f58a;LabVIEW单尺度质量指标算法 | &#x1f58a;MATLAB单尺度质量指标算法 | &…

TCP+UDP通信

一、UDP协议 1.1、recvfrom() 参数说明 int sockfd, //socket 的fd void *buf, // 保存数据的一块空间的地址 size_t len, //这块空间的大小 int flags,// 0 默认的接收方式 -----阻塞方式 默认行为是阻塞 MSG_DONTWAIT 不阻塞方式&#xff0c;用他的话代表读的时候是非…

宠物掉毛、有异味怎么办?怎么选择宠物空气净化器?

每当我和朋友提起我家养猫养狗之后&#xff0c;不少朋友总会带着好奇与担忧的表情&#xff0c;半开玩笑地说&#xff1a;“你家里岂不是充满了‘特别’的味道&#xff1f;”这也不怪她们会有这种印象&#xff0c;因为大部分养宠家庭可能都会遇到浮毛满天飞的情况&#xff0c;但…

深入探讨SD NAND的SD模式与SPI模式初始化

在嵌入式系统和存储解决方案中&#xff0c;SD NAND的广泛应用是显而易见的。CS创世推出的SD NAND支持SD模式和SPI模式&#xff0c;这两种模式在功能和实现上各有优劣。在本文中&#xff0c;我们将深入探讨这两种模式的初始化过程&#xff0c;并比较它们在不同应用场景下的优劣&…

什么是上网行为管理呢?【上网行为管理系统功能介绍 】

小编想跟大家介绍上网行为管理系统的功能&#xff0c;可以提高工作效率和安全性。如果你也和部分管理者一样&#xff0c;经常为网络管理头疼&#xff0c;不妨看看小编解析的上网行为管理功能&#xff0c;会让眼前一亮哦&#xff01;上网行管控 应用场景&#xff1a;过滤非法网站…

Tomcat类加载机制详解

1.Tomcat类加载机制详解 1.1 JVM类加载器 Java中有 3 个类加载器&#xff0c;另外你也可以自定义类加载器 引导&#xff08;启动&#xff09;类加载器&#xff1a;负责加载支撑JVM运行的位于JRE的lib目录下的核心类库&#xff0c;比如rt.jar、charsets.jar等扩展类加载器&am…