当前位置: 首页 > news >正文

数据结构基础之《(9)—归并排序》

一、什么是归并排序

1、整体是递归,左边排好序+右边排好序+merge让整体有序
2、让其整体有序的过程里用了排外序方法
3、利用master公式来求解时间复杂度
4、当然可以用非递归实现

二、归并排序说明

1、首先有一个f函数
void f(arr, L, R)
说明:在arr上,从L到R范围上让它变成有序的

2、递归调用

(1)先f(L, M)之间有序
(2)f(M+1, R)之间有序
(3)变成整体有序

左边是2、3、5,右边是0,5,6
准备一个一样长的辅助空间,然后左指针指向2,右指针指向0,谁小拷贝谁
然后右边的指针往后移,再次比较2和5,谁小拷贝谁,以此类推

(4)整体有序后,再把这一块空间刷回去

三、代码

package class03;public class Code01_MergeSort {/*** 变成整体有序* @param arr* @param L 数组下标* @param M 数组下标* @param R 数组下标*/public static void merge(int[] arr, int L, int M, int R) {int [] help = new int[R - L + 1];int i = 0;int p1 = L;int p2 = M + 1;while (p1 <= M && p2 <= R) {help[i++] = arr[p1] <= arr[p2] ? arr[p1++] : arr[p2++];}//要么p1越界了,要么p2越界了//看左边小于等于Mwhile (p1 <= M) {help[i++] = arr[p1++];}//还是右边小于等于Rwhile (p2 <= R) {help[i++] = arr[p2++];}for (i = 0; i < help.length; i++) {arr[L + i] = help[i];}}/*** 递归方法实现* arr[L...R]范围上,变成有序* @param arr*/public static void mergeSort1(int[] arr) {if (arr == null || arr.length < 2) {return;}process(arr, 0, arr.length - 1);}public static void process(int[] arr, int L, int R) {if (L == R) { // base casereturn;}int mid = L + ((R - L) >> 1);process(arr, L, mid);process(arr, mid + 1, R);merge(arr, L, mid, R);}/*** 非递归方法实现* @param arr*/public static void mergeSort2(int[] arr) {if (arr == null || arr.length < 2) {return;}int N = arr.length;int mergeSize = 1;while (mergeSize < N) {int L = 0;while (L < N) {int M = L + mergeSize - 1;if (M >= N) {break;}int R = Math.min(M + mergeSize, N - 1);merge(arr, L, M, R);L = R + 1;}if (mergeSize > N / 2) { //防止溢出break;}mergeSize <<= 1; //左移后赋值,相当于乘2后赋值}}public static void main(String[] args) {int[] aaa = {99, 100, 50, 70, 88, 10, 9, 35, 1, 98};int[] bbb = {99, 100, 50, 70, 88, 10, 9, 35, 1, 98};mergeSort1(aaa);for (int i: aaa) {System.out.print(i + " ");}System.out.println();mergeSort2(bbb);for (int i: bbb) {System.out.print(i + " ");}System.out.println();}
}

(1)递归说明

(2)非递归说明

原理:
k=2
相邻两个数之间merge在一起
k=4
四个数一组,merge在一起
...
一直到k到达N或者超过N

回到代码,代码中mergeSize就是k,外层while循环
  N  10
  mergeSize  1
  L  0
  内层while循环
    M  0
    R  1
    merge(arr, 0, 0, 1)
    L  2
    
    M  2
    R  3
    merge(arr, 2, 2, 3)
    L  4
    
    M  4
    R  5
    merge(arr, 4, 4, 5)
    L  6
    
    ...

然后mergeSize变成2,变成4...

四、归并排序复杂度

T(N)=2*T(N/2)+O(N^1)
根据master可知时间复杂度为O(N*logN)
merge过程需要辅助数组,所以额外空间复杂度为O(N)
归并排序的实质是把比较行为变成了有序信息并传递,比O(N^2)的排序快

相关文章:

数据结构基础之《(9)—归并排序》

一、什么是归并排序 1、整体是递归&#xff0c;左边排好序右边排好序merge让整体有序 2、让其整体有序的过程里用了排外序方法 3、利用master公式来求解时间复杂度 4、当然可以用非递归实现 二、归并排序说明 1、首先有一个f函数 void f(arr, L, R) 说明&#xff1a;在arr上…...

【深度学习】各种卷积—卷积、反卷积、空洞卷积、可分离卷积、分组卷积

在全连接神经网络中&#xff0c;每个神经元都和上一层的所有神经元彼此连接&#xff0c;这会导致网络的参数量非常大&#xff0c;难以实现复杂数据的处理。为了改善这种情况&#xff0c;卷积神经网络应运而生。 一、卷积 在信号处理中&#xff0c;卷积被定义为一个函数经过翻转…...

远程视频验证如何改变商业安全

如今&#xff0c;商业企业面临着无数的安全挑战。尽管企业的形态和规模各不相同——从餐厅、店面和办公楼到工业地产和购物中心——但诸如入室盗窃、盗窃、破坏和人身攻击等威胁让安全主管时刻保持警惕。 虽然传统的监控摄像头网络帮助组织扩大了其态势感知能力&#xff0c;但…...

电脑启动需要经历哪些过程?

传统BIOS启动流程 1. BIOS BIOS 启动&#xff0c;BIOS程序是烧进主板自带的ROM里的&#xff0c;所以无硬盘也可以启动。BIOS先进行自检&#xff0c;检查内存、显卡、磁盘等关键设备是否存在功能异常&#xff0c;会有蜂鸣器汇报错误&#xff0c;无错误自检飞快结束。 硬件自检…...

纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架

前言​ 开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C 库&#xff0c;如 ​​OpenCV​​ 或 ​​​dlib​​​&#xff0c;但通过 ​​​cgo​​​ 调用 C 程序会引入巨大的延迟&#xff0c;并在性能方面产生显著的权衡。…...

postman使用正则表达式提取数据实战篇!

之前篇章中postman多接口关联使用的是通过JSON提取器的方式进行提取。 除了JSON提取器提取数据外还可通过另一种方式——正则表达式来提取数据。 1、使用正则表达式提取器实现接口关联&#xff0c;match匹配 正则匹配表达式将需要提取的字段key:value都放入表达式中&#xff…...

ipmitool使用详解(三)-解决各种dell、hp服务器无法ipmitool连接问题

报错 [root@localhost ~]# ipmitool -H 10.1.2.41 -I lan -U admin -P "password123" lan print 1 Get Session Challenge command failed Error: Unable to establish LAN session Error: Unable to establish IPMI v1.5 / RMCP session [root@localhost ~]# ipmit…...

AWS EC2设置用户名密码登录

使用AWS EC2 设置用户名密码登录 步骤 1: 访问控制台 登录到AWS管理控制台。导航至 EC2 Dashboard。在左侧导航栏中选择 Instances。选择需要配置的实例。使用 EC2 Instance Connect 访问实例控制台。 步骤 2: 切换到 root 用户 打开终端或命令行工具&#xff0c;通过SSH连…...

BurpSuite安装教程(详细!!附带下载链接)

声明 学习内容来自 B 站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3fb;作者简介&#xff1a;致…...

MIPS寄存器文件设计实验

今天写MIPS寄存器文件设计实验&#xff0c;同时复习一下MIPS这块地方 实验要求&#xff1a; 一、寄存器的作用 想象一下&#xff0c;你正在厨房准备做一顿大餐。你需要用到各种食材和工具&#xff0c;比如刀、锅、砧板&#xff0c;还有食材本身&#xff0c;比如肉、菜、调料等…...

uniapp使用扩展组件uni-data-select出现的问题汇总

前言 不知道大家有没有学习过我的这门课程那&#xff0c;《uniCloud云开发Vue3版本官方推荐用法》&#xff0c;这么课程已经得到了官方推荐&#xff0c;想要快速上手unicloud的小伙伴们&#xff0c;可以学习一下这么课程哦&#xff0c;不要忘了给一键三连呀。 在录制这门课程…...

反向代理模块开发

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当于…...

海康面阵、线阵、读码器及3D相机接线说明

为帮助用户快速了解和配置海康系列设备的接线方式&#xff0c;本文将针对海康面阵相机、线阵相机、读码器和3D相机的主要接口及接线方法进行全面整理和说明。 一、海康面阵相机接线说明 海康面阵相机使用6-pin P7接口&#xff0c;其功能设计包括电源输入、光耦隔离信号输入输出…...

AI与ArcGIS Pro的地理空间分析和可视化

AI思维已经成为一种必备的能力&#xff0c;ArcGIS Pro3的卓越性能与ChatGPT的智能交互相结合&#xff0c;将会为您打造了一个全新的工作流程! 那么如何将火热的ChatGPT与ArcGIS Pro3相结合&#xff0c;使我们无需自己进行复杂的编程&#xff0c;通过强大的ChatGPT辅助我们完成地…...

详解HTML5语言

文章目录 前言任务一 认识HTML5任务描述&#xff1a;知识一 HTML5基础知识 任务二 HTML 5语义元素任务描述&#xff1a;知识一 HTML5新增结构元素知识二 HTML5文本语义元素 总结 前言 HTML5是一个新的网络标准&#xff0c;现在仍处于发展阶段。目标是取代现有的HTML 4.01和XHT…...

docker compose一键启动ES集群和kibana

集群启用了XPACK后&#xff0c;只有第一次可以启动成功。要是宕机了。就启动不了了。&#xff08;除非删除data目录所有数据&#xff09;生产环境 启用了后 建议配置 自定义证书。 services:es01:image: "docker.elastic.co/elasticsearch/elasticsearch:7.17.25"co…...

遗传算法与深度学习实战(25)——使用Keras构建卷积神经网络

遗传算法与深度学习实战&#xff08;25&#xff09;——使用Keras构建卷积神经网络 0. 前言1. 卷积神经网络基本概念1.1 卷积1.2 步幅1.3 填充1.4 激活函数1.5 池化 2. 使用 Keras 构建卷积神经网络3. CNN 层的问题4. 模型泛化小结系列链接 0. 前言 卷积神经网络 (Convolution…...

pytest+allure生成报告显示loading和404

pytestallure执行测试脚本后&#xff0c;通常会在电脑的磁盘上建立一个临时文件夹&#xff0c;里面存放allure测试报告&#xff0c;但是这个测试报告index.html文件单独去打开&#xff0c;却显示loading和404, 这个时候就要用一些办法来解决这个报告显示的问题了。 用命令产生…...

为何划分 Vue 项目结构组件?划分结构和组件解决了什么问题?为什么要这么做?

在一个大型 Vue 项目中,合理的目录结构和组件划分至关重要。良好的结构可以提高开发效率,减少维护成本,并使得团队合作更加顺畅。下面我将详细讲解如何在 Vue 项目中进行目录结构和组件划分,并结合实际项目代码示例进行说明。 1. 为什么要划分结构和组件? 1.1 提高可维护…...

springboot中使用mongodb完成评论功能

pom文件中引入 <!-- mongodb --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> yml中配置连接 data:mongodb:uri: mongodb://admin:1234561…...

Dubbo的RPC泛化调用

目录 一、RPC泛化调用的应用场景 二、Dubbo RPC泛化调用的实现原理 三、Dubbo RPC泛化调用的实现步骤 四、示例代码 五、泛化调用怎么发现提供该接口的服务及服务的IP和端口&#xff1f; Dubbo的RPC泛化调用是一种在调用方没有服务方提供的API的情况下&#xff0c;对服务方…...

【k8s深入理解之 Scheme】全面理解 Scheme 的注册机制、内外部版本、自动转换函数、默认填充函数、Options等机制

参考 【k8s基础篇】k8s scheme3 之序列化_基于schema进行序列化-CSDN博客【k8s基础篇】k8s scheme4 之资源数据结构与资源注册_kubernetes 的scheam-CSDN博客常见问题答疑 【k8s深入理解之 Scheme 补充-1】理解 Scheme 中资源的注册以及 GVK 和 go 结构体的映射-CSDN博客【k8s深…...

接口性能优化宝典:解决性能瓶颈的策略与实践

目录 一、直面索引 &#xff08;一&#xff09;索引优化的常见场景 &#xff08;二&#xff09;如何检查索引的使用情况 &#xff08;三&#xff09;如何避免索引失效 &#xff08;四&#xff09;强制选择索引 二、提升 SQL 执行效率 &#xff08;一&#xff09;避免不必…...

雨晨 Windows Server 2025 数据中心 极简 26311.5000

文件: 雨晨 Windows Server 2025 数据中心 极简 26311.5000 install.esd 大小: 1740910278 字节 修改时间: 2024年11月29日, 星期五, 19:00:20 MD5: 5B946B9DED569E04917E804B25A0F736 SHA1: E78BB430B3E0397F6ACFEB821CF85EA7CFB5A00F CRC32: B3F76BD7 常规制作旨在测试YCDIS…...

关于IDE的相关知识之三【插件安装、配置及推荐的意义】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于ide插件安装、配置及推荐意义的相关内容…...

JSP+Servlet实现列表分页功能

分享一种最简单的JSPServlet实现分页的方式&#xff01; 旧&#xff1a;无分页功能的查询列表功能&#xff0c;仅供参考&#xff01; Servlet try {Connection conn null;PreparedStatement ps null;ResultSet rs null;List<Dept> arrayList null;conn DBUtil.get…...

操作系统存储器相关习题

1 为什么要配置层次式存储器? 设置多个存储器可以使存储器两端的硬件能并行工作&#xff1b; 采用多级存储系统特别是Cache技术&#xff0c;是减轻存储器带宽对系统性能影响的最佳结构方案&#xff1b; 在微处理机内部设置各种缓冲存储器&#xff0c;减轻对存储器存取的压力。…...

QUICK 调试camera-xml解析

本文主要介绍如何在QUICK QCS6490使能相机模组。QCS6490的相机基于CameraX的框架&#xff0c;只需通过配置XML文件&#xff0c;设置相机模组的相关参数&#xff0c;就可以点亮相机。本文主要介绍Camera Sensor Module XML和Camera Sensor XML配置的解析&#xff0c;这中间需要c…...

【linux】shell脚本编写基础

shell 脚本关键字&#xff1a; 1、变量定义:前后不能空格 输入&#xff1a; zhao"Joe" echo ${zhao} echo "I am ${zhao}" 输出&#xff1a; yuxin I am Joe2、echo 输出 输入&#xff1a; echo "123" 输出&#xff1a; 1233、readonly 定义变…...

STM32 外设简介

STM32 外设简介 STM32 是由意法半导体 (STMicroelectronics) 开发的一系列基于 ARM Cortex 内核的微控制器&#xff0c;广泛应用于嵌入式系统中。STM32 系列的一个重要特点是其丰富而强大的外设模块&#xff0c;支持多种接口和功能&#xff0c;能满足工业控制、物联网、消费电…...

关于政府网站建设情况汇报/苏州网站制作推广

一&#xff1a;使用CDN&#xff0c;使用外部JavaScript和CSS&#xff0c;添加Expires头&#xff0c;减少DNS查找&#xff0c;配置ETag&#xff0c;使AjaX可缓存...

wordpress主题带数据/哪些平台可以打小广告

给定一个主串S&#xff08;长度<10^6&#xff09;和一个模式T&#xff08;长度<10^5&#xff09;&#xff0c;要求在主串S中找出与模式T相匹配的子串&#xff0c;返回相匹配的子串中的第一个字符在主串S中出现的位置。 输入格式: 输入有两行&#xff1a; 第一行是主串S&a…...

wordpress 后台反应/网站推广方案模板

SQLPro Studio mac 是Mac上一款简单&#xff0c;强大的macOS 数据库管理器&#xff0c;它可以帮助你管理多个数据库&#xff0c;支持Postgres, MySQL&#xff0c;Microsoft SQL Server&#xff0c;Oracle等主流数据库方便易用。安装完成即可免费使用&#xff01;sqlpro studio …...

技术支持 沧州辉煌网络-网站建设/上海百度推广客服电话

MySQL 常规操作 1. 查询 1.1 普通查询 select * from students; -- 获取所有数据 select * from students where age 15; -- 获取年龄为15的数据 select * from students where age 15 and sex male; 1. 2 模糊查询 select * from students where name like %小%; -…...

怎样用微信做购物网站/百度天眼查公司

在Java中&#xff0c;你可以使用指纹算法来计算图像相似度。 一种简单的指纹算法是哈希算法&#xff0c;它通过计算图像的哈希值来表示图像。可以使用哈希算法&#xff0c;如感知哈希算法&#xff0c;来计算图像的哈希值。然后&#xff0c;您可以通过计算两个图像的哈希值的汉明…...

制作网站图片不显示/网络营销软文范文

目录 一、事件监听 API 二、同步 API 三、异步 API 四、API大全 五、api的私人订制 一、事件监听 API 以 on 开头的 API 用来监听某个事件是否触发。 二、同步 API 以 Sync 结尾的 API 都是同步 API。 三、异步 API 大多数 API 都是异步 API。 四、API大全 请戳这里&a…...