蓝桥杯试题:归并排序
一、问题描述
在一个神秘的岛屿上,有一支探险队发现了一批宝藏,这批宝藏是以整数数组的形式存在的。每个宝藏上都标有一个数字,代表了其珍贵程度。然而,由于某种神奇的力量,这批宝藏的顺序被打乱了,探险队需要将宝藏按照珍贵程度进行排序,以便更好地研究和保护它们。作为探险队的一员,肖恩需要设计合适的排序算法来将宝藏按照珍贵程度进行从小到大排序。请你帮帮肖恩。
输入描述
输入第一行包括一个数字 nn ,表示宝藏总共有 nn 个。
输入的第二行包括 nn 个数字,第 ii 个数字 a[i]a[i] 表示第 ii 个宝藏的珍贵程度。
数据保证 1≤n≤1000,1≤a[i]≤1061≤n≤1000,1≤a[i]≤106 。
输出描述
输出 nn 个数字,为对宝藏按照珍贵程度从小到大排序后的数组。
样例输入
5
1 5 9 3 7
样例输出
1 3 5 7 9
二、代码演示:
import java.util.Scanner;
import java.util.*;
public class Main{// 1:无需package
// 2: 类名必须Main, 不可修改public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();int[] arr = new int[n];for(int i = 0 ; i < n ; i++)arr[i] = scan.nextInt();arr = mergeSort(arr,0,n-1);for(int i = 0;i < n;i++){System.out.print(arr[i] + " ");}scan.close();}public static int[] mergeSort(int[] arr , int l ,int h){if(l == h){return new int[] {arr[l]};}int mid = (l + h) /2;int[] left = mergeSort(arr,l,mid);int[] right = mergeSort(arr,mid + 1,h);int[] nums = new int[left.length + right.length];int m = 0 , i = 0 , j = 0;while(i < left.length && j < right.length){nums[m++] = left[i] < right[j] ?left[i++] : right[j++];}while(i < left.length)nums[m++] = left[i++];while(j < right.length)nums[m++] = right[j++];return nums;}}
代码解释
归并排序方法
1. - `public static int[] mergeSort(int[] arr, int l, int h)`:
- `public`:方法可以被其他类访问。
- `static`:方法属于类本身,而不是某个对象。
- `int[]`:返回类型是整数数组。
- `mergeSort`:方法名。
- `int[] arr`:要排序的数组。
- `int l`:当前处理的子数组的起始索引。
- `int h`:当前处理的子数组的结束索引。
2. if(l == h){
return new int[] {arr[l]};
}
当子数组只有一个元素时(`l == h`),直接返回该元素的数组,因为它已经是有序的。3.分割数组
int mid = l + (h - l) / 2;
int[] left = mergeSort(arr, l, mid);
int[] right = mergeSort(arr, mid + 1, h);
- `int mid = l + (h - l) / 2;`:计算中间索引,避免直接用 `(l + h) / 2` 可能导致的整数溢出。
- `mergeSort(arr, l, mid)`:递归地对左半部分进行排序。
- `mergeSort(arr, mid + 1, h)`:递归地对右半部分进行排序。4 合并两个有序数组
int[] nums = new int[left.length + right.length];int m = 0, i = 0, j = 0;
while(i < left.length && j < right.length){
nums[m++] = left[i] < right[j] ? left[i++] : right[j++];
}while(i < left.length)
nums[m++] = left[i++];
while(j < right.length)
nums[m++] = right[j++];
- `int[] nums = new int[left.length + right.length];`:创建一个新的数组 `nums`,用于存储合并后的结果。
- 合并过程:
- 使用三个指针 `m`, `i`, `j` 分别指向 `nums`, `left`, `right` 数组的当前位置。
- 比较 `left[i]` 和 `right[j]` 的大小,将较小的元素放入 `nums` 中,并移动相应的指针。
- 当其中一个子数组的所有元素都被合并后,剩下的另一个子数组的元素依次放入 `nums` 中。
相关文章:
蓝桥杯试题:归并排序
一、问题描述 在一个神秘的岛屿上,有一支探险队发现了一批宝藏,这批宝藏是以整数数组的形式存在的。每个宝藏上都标有一个数字,代表了其珍贵程度。然而,由于某种神奇的力量,这批宝藏的顺序被打乱了,探险队…...
物联网(IoT)如何与人工智能(AI)的结合
物联网(IoT)与人工智能(AI)的结合是当前技术发展的重要趋势,通常被称为 AIoT(人工智能物联网)。这种结合通过将AI的计算能力和数据分析能力与物联网的海量设备连接能力相结合,实现了…...

一致性Hash算法延伸至Redis分片扩容使Lua脚本失效如何解决
文章部分内容来源:小林coding 问题场景:我们需要用Lua脚本,并且这个Lua脚本需要用到两个Key,但这两个Key必须命中同一台机器才可以,不然Lua脚本就会执行失败。如果集群扩容可能会导致两个Key落到不同的节点上导致Lua脚…...
Idea 插件 Quickly-Code-Toolkit
使用说明 (一)全局设置 Paging Wrapper Setting(分页设置) 功能:主要用于在方法写入时,为返回参数提供分页包装类。设置方式:需准确填写分页包装类的全限定名,例如:com…...
先进制造aps专题二十九 基于ai智能体的生产排程和工厂生产仿真引擎的设计
上文中,我们说,通常的做法是,可以先通过排产仿真引擎产生生产计划,再在工厂仿真引擎里仿真执行,这样可以预先分析计划和执行的差异情况并进行调整优化 这里的产生生产计划,仿真生产执行和数据分析都是人工…...

【Cocos TypeScript 零基础 15.1】
目录 见缝插针UI脚本针脚本球脚本心得_旋转心得_更改父节点心得_缓动动画成品展示图 见缝插针 本人只是看了老师的大纲,中途不明白不会的时候再去看的视频 所以代码可能与老师代码有出入 SIKI_学院_点击跳转 UI脚本 import { _decorator, Camera, color, Component, directo…...

利用邮件合并将Excel的信息转为Word(单个测试用例转Word)
利用邮件合并将Excel的信息转为Word 效果一览效果前效果后 场景及问题解决方案 一、准备工作准备Excel数据源准备Word模板 二、邮件合并操作步骤连接Excel数据源插入合并域预览并生成合并文档 效果一览 效果前 效果后 场景及问题 在执行项目时的验收阶段,对于测试…...

尚硅谷课程【笔记】——大数据之Hadoop【一】
课程视频链接:尚硅谷Hadoop2.x框架入门 一、大数据概论 1)大数据概念 大数据(Big Data):指无法再一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞…...
C++ ——基础进阶
1、引用 概念:相当于给变量取个别名,通过使用&在变量定义时定义 1.1 性质 (1)成为一个变量的引用后,就不能成为其他变量的引用 int a1; int& a_citea; int b90; a_citeb; //相当于把b的值给了a_cite cout&l…...
@synchronized的使用
synchronized 介绍 synchronized 是 Objective-C 提供的一种 互斥锁(Mutex),它用于确保一段代码在同一时间只有一个线程能执行,避免多线程访问共享资源时出现数据竞争。 基本语法 synchronized (lockObject) {// 需要加锁的代码…...

策略模式-小结
总结一下看到的策略模式: A:一个含有一个方法的接口 B:具体的实行方式行为1,2,3,实现上面的接口。 C:一个环境类(或者上下文类),形式可以是:工厂模式,构造器注入模式,枚举模式。 …...
【Stable Diffusion部署至Google Colab】
Google Colab 中快速搭建带 GPU 加速的 Stable Diffusion WebUI from google.colab import drive drive.mount(/content/drive) !mkdir /content/drive/MyDrive/sd-webui-files !pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index…...

Vue.js 与低代码开发:如何实现快速应用构建
在当今数字化高速发展的时代,企业对应用开发的速度和效率有着迫切的需求。传统开发模式往往周期长、成本高,难以满足市场的快速变化。而低代码开发的兴起,为这一困境带来了转机。Vue.js 作为一款流行的 JavaScript 前端框架,以其简…...

【无标题】《On Java中文版基础卷+进阶卷》书评
Java语言作为最热门的编程语言之一,关于Java语言的书更是数不胜数,而我选择这本《On Java中文版基础卷进阶卷》作为我学习Java语言的工具书。这本书的作者是《Java编程思想》的Bruce Eckel,《Java编程思想》在之前可谓是鼎鼎有名,…...
Spring Boot从入门到精通:核心知识点+实战指南
目录 一、Spring Boot 是什么?为什么它如此流行? 二、快速创建你的第一个Spring Boot应用 2.1 使用Spring Initializr生成项目 2.2 核心代码示例 三、深度解析Spring Boot核心机制 3.1 自动配置原理揭秘 3.2 自定义Starter实战 四、生产环境必备…...

网络安全 | 网络安全自动化:让防护更智能高效
网络安全 | 网络安全自动化:让防护更智能高效 一、前言二、网络安全自动化的核心概念2.1 定义与内涵2.2 与传统网络安全方法的区别 三、网络安全自动化的应用领域3.1 威胁检测与响应3.2 漏洞管理3.3 访问控制与身份认证 四、推动网络安全自动化发展的因素4.1 技术进…...

时间敏感和非时间敏感流量的性能保证配置
论文标题 中文标题: 时间敏感和非时间敏感流量的性能保证配置 英文标题: Provisioning of Time-Sensitive and non-Time-Sensitive Flows with Assured Performance 作者信息 Luis Velasco, Gianluca Graziadei, Sima Barzegar, Marc Ruiz Optical Co…...
502 Bad Gateway 错误详解:从表现推测原因,逐步排查直至解决
502 Bad Gateway 错误通常意味着服务器之间的通信失败,但导致的具体原因往往因场景而异。 场景一:高峰期频繁出现 502 错误 1.1 现象 在流量高峰期间(如促销活动、直播发布等),页面访问变慢甚至出现 502 错误&#…...

如何获取,CPU,GPU,硬盘,网卡,内存等硬件性能监控与各项温度传感器
首先需要下载 OpenHardwareMonitorServer 这是一个基于OpenHardwareMonitor 的 Web 服务器。可以让任何语言都可以获取硬件信息和值,OpenHardwareMonitorServer 是没有UI界面的因此它可以当成控制台程序使用。 该程序可用参数如下 参数:需要管理员权限…...

4. React 中的 CSS
用例中的干净的脚手架的创建可以参考另一篇文章:3.React 组件化开发React官方并没有给出在React中统一的样式风格: 由此,从普通的css,到css modules,再到css in js,有几十种不同的解决方案,上百…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...