算法_冒泡排序法(04)

2023-10-27

java源代码实现:

public class Bubble {
	//冒泡排序法
	public void sort(int [] arr){
		//外层循环
		//决定此排序走几趟
		for(int i=0;i<arr.length-1;i++){//由于是前面一个数和后面一个数比较,必须保证后面一个数不能越界,所以length-1
			//内层循环
			//交换
			for(int j=0;j<arr.length-1-i;j++){//进行一次循环后,最后一个数肯定排好了,类推,循环几次后,后面就有几个数已经排好了
				if(arr[j]>arr[j+1]){
					int temp=arr[j];//把较大的数记录下来
					arr[j]=arr[j+1];//此处就是为什么外层for循环必须-1的原因了,否则会越界
					arr[j+1]=temp;
				}				
			}
		}
	}
	//显示
	public void show(int []arr){
		for(int i:arr){
			System.out.print(i+" ");
		}
	}
}
测试代码:

public static void main(String[] args) {
		final int COUNT=100000;//十万
		int []arr=new int[COUNT];//={1,6,0,-1,9,-2,12,-90};
		for(int i=0;i<COUNT;i++){
			arr[i]=(int)(Math.random()*COUNT);//Math.random产生一个0~1的小数,且速度比Random快,因为Random需要实例化;随机COUNT个数
		}		
		
		long start=System.currentTimeMillis();
		//创建一个冒泡类
		Bubble b=new Bubble();
		b.sort(arr);		
		long end=System.currentTimeMillis();
		System.out.println("排序使用的时间是:"+(end-start)/1000+"s");
	}
运行结果:

排序使用的时间是:31s

这是一个最经典的排序方法,第一个算法就是学的他,虽然速度有点慢,但是基本思想还是需要了解一下的

总结:

后面三个排序法,对于10万个无序整数来说,插入式排序(7s)比选择式排序(16s)快一倍,而选择式排序(16s)又比冒泡排序(31s)快一倍,可十万数据量对快速排序法来说,简直就是小儿科(16ms);哪怕是一亿个无序整数排好也只需要22s,因此在不需要考虑内存开销的情况下,优先考虑快速排序法,需兼顾速度和内存开销的情况下,可选择插入式排序法
当然还有其他排序方法,目前只接触这常见的4种排序方法,欢迎和大家一起讨论学习

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法_冒泡排序法(04) 的相关文章

  • HAProxy SSL终止+客户端证书验证+curl/java客户端

    我希望使用我自己的自签名证书在 HAProxy 上进行 SSL 终止 并使用我创建的客户端证书验证客户端访问 我通过以下方式创建服务器 也是 CA 证书 openssl genrsa out ca key 1024 openssl req
  • 在另一个文件中扩展类的正确方法是什么?

    这就是我在 foo php 中的内容 class Foo public foo NULL public foo2 NULL public function setFoo foo foo2 this gt foo foo this gt fo
  • Spring数据中的本机查询连接

    我有课 Entity public class User Id Long id String name ManyToMany List
  • Java中的断点和逐步调试?

    抱歉我的问题名称很奇怪 我不知道如何寻找这个 因为我不知道这些东西是如何称呼的 Visual Studio 中至少有一个功能 您可以单击代码左侧并设置一个大红点的起点 然后运行程序 您可以通过按 f8 或 f5 实际上是不同的 f 来跟踪步
  • 如何从字符串中提取子字符串直到遇到第二个空格?

    我有一个像这样的字符串 o1 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 如何仅提取 o1 1232 5467 要提取的字符数并不总是相同 因此 我只想提取直到遇到
  • org/codehaus/plexus/archiver/jar/JarArchiver(不支持的major.minor版本49.0)-Maven构建错误

    下午大家 我在尝试构建项目时收到上述错误 我很确定这与使用 Java 1 6 编译的 Maven 最新更新有关 而我们尝试构建的项目是 1 4 项目 在此之前的插件工作没有问题 因此我将以下内容添加到 POM xml 文件中以尝试强制使用现
  • 从休眠乐观锁定异常中恢复

    我有一个这样的方法 Transactional propagation Propagation REQUIRES NEW public void doSomeWork Entity entity dao loadEntity do some
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • Eclipse - 安装新的 JRE (Java SE 8 1.8.0)

    我正在尝试安装 Java 8 到目前为止我所做的 安装最新版本的 Eclipse 下载并安装 Java SE 运行时环境 8http www oracle com technetwork java javase downloads jre8
  • 通过 appassembler-maven-plugin 生成的脚本无法在 Spring Boot 应用程序中找到主类

    我使用 appassembler maven plugin 生成的启动脚本有问题 我有一个基本的 spring boot 应用程序 只有一个类 SpringBootApplication public class ScriptDemoApp
  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • Matlab strcat 不返回字符串?

    imgstr 无法识别 strcat 的输出字符串 homedir C Users images for img 01 bmp 02 bmp 03 bmp imgstr strcat homedir img I imread imgstr
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • 在 Clojure 中解压缩 zlib 流

    我有一个二进制文件 其内容由zlib compress在Python上 有没有一种简单的方法可以在Clojure中打开和解压缩它 import zlib import json with open data json zlib wb as
  • 无法在 Java/Apache HttpClient 中处理带有垂直/管道栏的 url

    例如 如果我想处理这个网址 post new HttpPost http testurl com lists lprocess action LoadList 401814 1 Java Apache 不允许我这么做 因为它说竖线 是非法的
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • Karaf / Maven - 无法解决:缺少需求 osgi.wiring.package

    我无法在 Karaf 版本 3 0 1 中启动捆绑包 该包是使用 Maven 构建的并导入gson http mvnrepository com artifact com google code gson gson 2 3 1 我按照要求将
  • 使用Java绘制维恩图

    我正在尝试根据给定的布尔方程绘制维恩图 例如 a AND b AND c我想在 Android 手机上执行此操作 因此我需要找到一种使用 Java 来执行此操作的方法 我找到了一个完美的小部件 它可以完成我在这方面寻找的一切布尔代数计算器
  • 使用 JFreeChart 为两个系列设置不同的 y 轴

    我正在使用 JFreeChart 使用折线图绘制两个数据系列 XYSeries 复杂的因素是 其中一个数据系列的 y 值通常远高于第二个数据系列的 y 值 假设第一个系列的 y 值约为数百万数量级 而第二个数据系列的 y 值约为数百万数量级
  • 即使调整大小,如何获得屏幕的精确中间位置

    好的 这个问题有两部分 当我做一个JFrame 并在其上画一些东西 即使我将宽度设置为 400 并使其在一个项目击中它时 当然 允许项目宽度 它会反弹回来 但由于某种原因 它总是偏离屏幕约 10 个像素 有没有办法解决这个问题 或者我只需要

随机推荐

  • Linux下报 No manual entry for 的解决方法

    报错展示 报错原因 没有安装 man pages 这个包 解决方法 yum y install man pages
  • 【界面】yolov8+pyqt5进行目标识别

    解决问题 通过pyqt5进行界面设计 调用yolov8模型对目标进行检测 文章目录 工具 准备工作 获取Onnx模型 核心代码 运行结果 源代码路径 工具 语言 python 主要库 pyqt5 检测模型 yolov8 准备工作 获取Onn
  • 机器学习:Self-supervised Learning for Speech and image

    review self supervised learning for text 1 Self supervised learning for speech 使用Speech版本的bert能比较好的作用于语音任务上 如果没有self sup
  • Windows无法安装到这个磁盘。选中的磁盘具有MBR分区表。在EFI系统上,Windows只能安装到GPT磁盘

    问题描述 Windows无法安装到这个磁盘 选中的磁盘具有MBR分区表 在EFI系统上 Windows只能安装到GPT磁盘 原因 说明本电脑的上一个系统的磁盘分区方式采用的MBR分区表 而我们U盘安装时 驱动方式是EFI系统 EFI与之对应
  • 力扣(LeetCode) 1.两数之和(java)

    题目 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组中找出 和为目标值 target 的那 两个 整数 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素在答案里不能重复出现 你可以按
  • NDK_MODULE_PATH

    Cocos2d x 2 1的测试环境搭建 先下载COCOS2D的包解压后运行里面的create android project bat 这里面要先设置相应的路径 他会引导用户创建一个自定义项目 在编译这个项目前要先在ECLIPSE里设置ND
  • log4j2日志配置

    背景 log4j2相对于log4j 1 x有了脱胎换骨的变化 其官网宣称的优势有多线程下10几倍于log4j 1 x和logback的高吞吐量 可配置的审计型日志 基于插件架构的各种灵活配置等 官方配置文档 http logging apa
  • 两种方法实现Windows系统下批量重命名文件

    任务 我们现在有一批文件 想要批量的重命名文件 方便程序读写 例如 将下面的这些图片重命名为1 jpg 2 jpg 1000 jpg 总不能一个一个改吧 Windows自带的重命名 Windows自带的功能也可以进行重命名 操作很简单 第一
  • Android Gradle获取第三方SDK最新版本号

    由于最近隐私权限问题 需要更新一下友盟的SDK 但是找不到最新的版本号在哪里 android studio也没有主动提示可以更新版本了 如下 不是最新的 implementation com umeng umsdk asms 1 4 0 i
  • SpringBoot动态定时任务(完整版)

    本文定时任务功能 增 删 改 启动 暂停 话不多说 直接上代码 你们直接CV就可以用 执行定时任务的线程池配置类 import org springframework context annotation Bean import org s
  • 论文分享-Heterogeneity-Aware Cluster Scheduling Policies for Deep Learning Workloads

    前言 这篇文章是由斯坦福大学和微软研究院共同合作的 于2020年11月发表于系统类顶级会议OSDI 主要研究了不同异构硬件资源对深度学习负载的影响和集群调度策略的设计 1 摘要 专门的加速器 如gpu TPUs fpga和定制asic 已经
  • ed2k文件下载方法

    之前可以用百度网盘的离线下载进行操作 但现在行不通了 听我的别乱尝试 直接下个迅雷 复制了ed2k链接之后就直接弹出窗口下载
  • iTerm2 配置

    https www jianshu com p f45f64cd6cca iTerm2超详细安装和配置 简书 iTerm2固定标签名字 简书
  • vue2 自定义指令实现可移动模态框效果

    vue2 自定义指令实现可移动模态框效果 此效果通过 vue 指令方式实现任意元素可拖拽移动 参考官网指令介绍 https v2 cn vuejs org v2 guide custom directive html 在 drag js 文
  • VMWARE 服务器整合为战提供的解决方案

    虚拟构架提供前所未有的负载隔离 为所有系统运算和 I O 设计的微型 资源控制 虚拟构架完美地结合现有的管理软件并在共享存储 SAN 上改 进投资回报率 通过把物理系统整合到有 VMWARE 虚拟构架的数据中心上 去 企业体验到 更少的硬件
  • java计算n的阶乘的程序_Java编程计算n的阶乘

    n 可能很大 而计算机能表示的整数范围有限 需要使用高精度计算的方法 使用一个数组A来表示一个大整数a A 0 表示a的个位 A 1 表示a的十位 依次类推 将a乘以一个整数k变为将数组A的每一个元素都乘以k 请注意处理相应的进位 首先将a
  • Python报错解决——‘ffmpeg‘ 不是内部或外部命令,也不是可运行的程序

    问题发现 我在调用ffmpeg包的时候出现了如下的报错 ffmpeg 这是一堆乱码 我上网查过了之后说这个乱码其实说的是 ffmpeg 不是内部或外部命令 也不是可运行的程序这个问题 网上有博客说只要改一下编码格式就好了 但是我改了依然没成
  • android Dialog 背景问题

    我们在使用自定义的Dialog的时候 喜欢自己定义一下样式 设置自己的背景 等等 可是最近使用Dialog样式的时候背景出现了问题 在样式文件中使用了
  • Qt含有图面资源,编译不通过的情况处理(报错内容为:no rule to make target ‘****‘needed by ‘debug/qrc_****.cpp)

    解决方法一 删除makefile文件中的错误项 此方法的思路是 将出问题的图片删除 如果后序需要这个图片 重新添加这个图片就可以了 1 打开Qt运行后生成的build Debug文件夹 2 打开makefile Debug文件 查找到qt报
  • 算法_冒泡排序法(04)

    java源代码实现 public class Bubble 冒泡排序法 public void sort int arr 外层循环 决定此排序走几趟 for int i 0 i