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

归并排序:分治法的经典应用

一、前言归并排序是基于分治法的典型排序算法通过递归将数组拆分为最小单元单个元素再通过合并操作将有序子序列逐步组合成完整有序序列。其核心在于分解与合并的协同操作二、分治法与递归拆分分治法将原问题分解为若干规模较小但结构相似的子问题递归求解后再合并子问题的解。归并排序是分治法的直接体现拆分将待排序数组从中间分成左右两半分别递归排序直到每个子数组只包含一个元素单个元素天然有序。合并将两个有序子数组合并为一个有序数组。整个过程需要两个核心函数Divide递归拆分和Merge合并两个有序数组三、函数设计Divide函数负责递归拆分数组void Divide(int arr[], int left, int right) { int mid (left right) / 2; //可能会超int类型存储上限 left/2 right/2) if (left right) { //[left, right] mid //左半边[left, mid] 右半边[mid 1, right] Divide(arr, left, mid); Divide(arr, mid 1, right); Merge(arr, left, mid, right); //合并 } }Merge函数负责合并两个有序子数组void Merge(int arr[], int left, int mid, int right) { //0.安全判断 //1.申请一个辅助空间brr长度只要能放下合并的这两个组的所有元素即可 int len right - left 1; int* brr (int*)malloc(sizeof(int) * len); if (brr NULL) return; //exit(EXIT_FAILURE); //2.申请两个变量i j, 分别指向两个组的第一个元素 int i left; //左边组开头 int j mid 1; //右边组开头 int k 0; //辅助数组下标 //3.进入while循环循环条件i,j没有越界循环合法 while (i mid j right) { //4.比较i j指向的两个组的各自第一个元素值 // 谁小谁向下放brr,相等的话也是下放 if (arr[i] arr[j]) brr[k] arr[i]; else brr[k] arr[j]; } //5.当while循环进不去代表肯定i或者j走完了 //有一个组的数据被挪动完了则将另一个组没有挪动完的值同步 while (i mid) brr[k] arr[i]; while (j right) brr[k] arr[j]; //6.这是两个组的合并结果就在brr里面最后再将brr的数据同步给arr for (k 0; k len; k) { arr[left k] brr[k]; } // 释放临时空间 free(brr); brr NULL; }MergeSort函数对外接口void MergeSort(int arr[], int len) { //执行递归分函数 Divide(arr, 0, len - 1); }四、手算模拟以数组[5, 3, 8, 4, 2]为例拆分阶段第一层拆分[5,3,8]和[4,2]第二层拆分[5,3]、[8]和[4]、[2]第三层拆分[5]、[3]合并阶段合并[5]和[3]得到[3,5]合并[3,5]和[8]得到[3,5,8]合并[4]和[2]得到[2,4]最终合并[3,5,8]和[2,4]得到[2,3,4,5,8]五、复杂度分析时间复杂度所有情况均为O(n log n)。每次递归将问题规模减半log n层每层需O(n)时间合并。空间复杂度O(n)用于辅助数组。稳定性稳定由于合并时对相等元素优先取左子数组元素算法是稳定的六、优缺点对比优点时间复杂度稳定为O(n log n)不受输入数据分布影响。稳定排序适合需要保持原始顺序的场景。缺点需要额外O(n)空间不适合内存严格受限的环境。对比O(n²)排序如冒泡排序归并排序在大规模数据下效率显著更高但小规模数据可能因递归开销反而更慢。下次我们将讲解另一种分治排序——快速排序它采用不同的拆分策略按基准元素划分且可以做到原地排序。敬请期待

相关文章:

归并排序:分治法的经典应用

一、前言归并排序是基于分治法的典型排序算法,通过递归将数组拆分为最小单元(单个元素),再通过合并操作将有序子序列逐步组合成完整有序序列。其核心在于分解与合并的协同操作二、分治法与递归拆分分治法将原问题分解为若干规模较…...

别再只会qemu-img create了!这5个隐藏功能帮你搞定虚拟磁盘运维难题

解锁qemu-img的五大高阶玩法:从磁盘运维到性能调优实战指南 虚拟化技术已经成为现代IT基础设施的核心支柱,而磁盘镜像管理则是虚拟化运维中最频繁接触却又最容易被忽视的环节。大多数运维工程师对qemu-img的认识停留在基础的创建和转换操作,却…...

OBS-VirtualCam完全指南:如何在Zoom、Teams等应用中轻松使用OBS虚拟摄像头

OBS-VirtualCam完全指南:如何在Zoom、Teams等应用中轻松使用OBS虚拟摄像头 【免费下载链接】obs-virtual-cam 项目地址: https://gitcode.com/gh_mirrors/obs/obs-virtual-cam 你是否曾经希望在Zoom、Teams或Skype视频会议中展示OBS Studio精心设计的专业场…...

从MMoE到PLE:手把手教你用PaddlePaddle复现腾讯的多任务学习模型(附完整代码)

从MMoE到PLE:基于PaddlePaddle的多任务学习模型实战解析 在推荐系统与广告点击率预测等场景中,多任务学习(MTL)已成为提升模型效率的关键技术。传统单一任务模型往往面临数据稀疏和计算资源浪费的问题,而MTL通过共享底…...

搜索了多款去水印工具,我终于发现了真正的「去水印黑科技」

目录 一、搜出来的前排工具,90%都是废物 1. Magic Eraser:名气大,效果拉胯(喜欢标注小字的封面慎用) 2. Dewatermark:过度删除重灾区(喜欢标注小字的封面慎用) 3. 开拍:免费次数少,效果还一般 4. 360去水印:效果差就算了,下载还要会员 5. Canva:效果勉强及格,痕迹…...

如何为现有Python项目迁移至Taotoken并享受折扣

如何为现有Python项目迁移至Taotoken并享受折扣 1. 迁移前的准备工作 在开始迁移之前,建议先梳理现有项目的API调用情况。记录当前使用的模型名称、调用频率以及关键接口路径。这将帮助您在Taotoken平台上快速找到对应的模型和服务。 确保您已经注册了Taotoken账…...

【辽宁省力学学会主办】第三届航空航天与力学国际学术会议(ICAM 2026)

第三届航空航天与力学国际学术会议(ICAM 2026) 2026 3rd International Conference on Aerospace and Mechanics 2026年7月3-5日|中国-沈阳 第三届航空航天与力学国际学术会议(ICAM 2026)将于2026年7月3-5日在沈阳隆重召开&…...

Ultimate ASI Loader:Windows游戏模组安装的终极解决方案

Ultimate ASI Loader:Windows游戏模组安装的终极解决方案 【免费下载链接】Ultimate-ASI-Loader The Ultimate ASI Loader is a proxy DLL that loads custom .asi libraries into any game process. 项目地址: https://gitcode.com/gh_mirrors/ul/Ultimate-ASI-L…...

【企业级实时通信架构升级指南】:PHP Swoole + LLM 长连接方案落地的5大核心陷阱与2024年生产环境避坑手册

更多请点击: https://intelliparadigm.com 第一章:企业级实时通信架构升级的背景与演进趋势 近年来,企业对低延迟、高并发、强一致性的实时通信能力需求激增——从金融交易系统的毫秒级行情推送,到远程医疗中的多方音视频协同&am…...

MCNP5新手避坑指南:从零开始,手把手教你编写第一个蒙特卡罗模拟程序

MCNP5实战入门:从几何建模到结果可视化的全流程解析 核工程领域的研究者和工程师们常常需要面对复杂的粒子输运问题,而蒙特卡罗方法因其强大的模拟能力成为不可或缺的工具。作为该领域的标杆软件,MCNP5的学习曲线却让不少初学者望而生畏——那…...

Ultimate ASI Loader完整教程:5分钟学会为游戏加载自定义模组

Ultimate ASI Loader完整教程:5分钟学会为游戏加载自定义模组 【免费下载链接】Ultimate-ASI-Loader The Ultimate ASI Loader is a proxy DLL that loads custom .asi libraries into any game process. 项目地址: https://gitcode.com/gh_mirrors/ul/Ultimate-A…...

VisualCppRedist AIO:终极解决方案!一键修复Windows所有VC++运行库问题

VisualCppRedist AIO:终极解决方案!一键修复Windows所有VC运行库问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾在安装软件…...

抖音视频无水印下载终极指南:免费开源工具快速批量下载完整教程

抖音视频无水印下载终极指南:免费开源工具快速批量下载完整教程 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallb…...

视频硬字幕提取终极指南:本地化、高精度、多语言支持

视频硬字幕提取终极指南:本地化、高精度、多语言支持 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域检测、字幕内容…...

告别手动抄写:用本地化AI工具5分钟搞定视频字幕提取

告别手动抄写:用本地化AI工具5分钟搞定视频字幕提取 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域检测、字幕内容提…...

华硕笔记本终极性能调校:G-Helper技术架构深度解析

华硕笔记本终极性能调校:G-Helper技术架构深度解析 【免费下载链接】g-helper G-Helper is a fast, native tool for tuning performance, fans, GPU, battery, and RGB on any Asus laptop or handheld - ROG Zephyrus, Flow, Strix, TUF, Vivobook, Zenbook, ProA…...

Moonlight-Switch:Nintendo Switch游戏串流技术方案与多平台兼容架构

Moonlight-Switch:Nintendo Switch游戏串流技术方案与多平台兼容架构 【免费下载链接】Moonlight-Switch Moonlight port for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/mo/Moonlight-Switch Moonlight-Switch作为Nintendo Switch平台的游戏…...

3步彻底解决Visual C++运行库问题:VisualCppRedist AIO完全指南

3步彻底解决Visual C运行库问题:VisualCppRedist AIO完全指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况&#xff1…...

企业如何通过 Taotoken 实现内部 AI 调用审计与安全管控

企业如何通过 Taotoken 实现内部 AI 调用审计与安全管控 1. 企业级 API Key 管理与访问控制 企业 IT 管理员在 Taotoken 控制台可以创建多个 API Key,并为每个 Key 设置不同的权限和访问范围。通过为不同部门或项目分配独立的 Key,实现调用权限的隔离。…...

手把手教你用缩放因子搞定QML跨屏适配:从1920x1080到任意分辨率的保姆级教程

手把手教你用缩放因子搞定QML跨屏适配:从1920x1080到任意分辨率的保姆级教程 在开发跨平台应用时,屏幕适配一直是让开发者头疼的问题。特别是对于QML这种声明式UI框架来说,如何在从800x600到4K的各种分辨率下都能保持界面美观和功能完整&…...

从用户吐槽到PRD初稿:我是如何用ChatGPT分析客户反馈自动生成需求清单的

从用户吐槽到PRD初稿:用AI重构需求挖掘的黄金流程 当应用商店的差评如雪花般飞来,当客服系统的工单堆积如山,当用户访谈的录音塞满硬盘——产品经理们是否曾对着这些"数据富矿"感到束手无策?我们往往陷入两难&#xff1…...

别再乱配CORS了!Flask-CORS从入门到生产环境安全配置实战(含Nginx反向代理)

Flask-CORS生产环境安全配置指南:从宽松到严格的最佳实践 跨域资源共享(CORS)是现代Web开发中无法回避的话题。许多开发者在使用Flask-CORS扩展时,往往止步于CORS(app)这一简单配置,却忽略了生产环境中必须考虑的安全隐…...

借助模型广场与官方折扣为新项目选择高性价比模型

借助模型广场与官方折扣为新项目选择高性价比模型 1. 理解模型广场的核心功能 Taotoken 模型广场是开发者接入大模型服务的起点。该页面聚合了多家厂商的主流模型,以标准化格式展示各模型的基础能力、适用场景和技术参数。对于新项目团队而言,模型广场…...

避坑指南:用ATGM336H模块做定位,为什么你的STM32总收不到有效数据?

ATGM336H模块实战:STM32开发者必知的GPS数据解析避坑指南 当你第一次将ATGM336H模块连接到STM32开发板时,满心期待能获取精准的经纬度坐标,却发现串口终端里只有一堆乱码或固定不变的字符串——这种挫败感我深有体会。作为一款支持北斗/GPS双…...

Wireshark实战:手把手教你读懂TCP SACK包里的SLE和SRE(附避坑指南)

Wireshark实战:手把手教你读懂TCP SACK包里的SLE和SRE(附避坑指南) 当你用Wireshark分析网络问题时,那些带着SACK选项的TCP包就像一封封加密的情报,而SLE和SRE字段就是破译丢包范围的关键密码。作为运维工程师&#xf…...

ERA框架:融合先验知识与强化学习的具身智能体新范式

1. ERA框架概述:具身智能体的新范式在机器人学和人工智能的交叉领域,具身智能体(Embodied Agent)正经历着从实验室走向实际应用的转型期。传统方法往往将感知、决策和执行割裂处理,导致系统在复杂动态环境中表现僵硬。…...

如何高效使用FanControl:Windows风扇控制软件的5个实用技巧

如何高效使用FanControl:Windows风扇控制软件的5个实用技巧 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendi…...

为什么87%的MCP 2026集成项目在UAT阶段失败?——基于12家头部客户日志的根因分析与48小时修复清单

更多请点击: https://intelliparadigm.com 第一章:为什么87%的MCP 2026集成项目在UAT阶段失败?——基于12家头部客户日志的根因分析与48小时修复清单 在对12家金融、电信与政务领域头部客户的MCP 2026(Model-Controller-Protocol…...

ncmdump终极指南:3分钟解锁网易云音乐加密文件的完整解决方案

ncmdump终极指南:3分钟解锁网易云音乐加密文件的完整解决方案 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾为网易云音乐的NCM加密格式而烦恼?想要在车载音响、其他播放器或不同设备上播放下载的音…...

多模态模型小型化:挑战与优化策略

1. 项目背景与核心挑战在人工智能领域,多模态模型正逐渐从实验室走向实际应用。不同于传统单一模态(如纯文本或图像)的AI系统,多模态模型能够同时处理和理解文本、图像、音频等多种信息形式。这种能力使得机器可以更接近人类的感知…...