08-8.5.1 归并排序

👋 Hi, I’m @Beast Cheng
👀 I’m interested in photography, hiking, landscape…
🌱 I’m currently learning python, javascript, kotlin…
📫 How to reach me --> 458290771@qq.com


喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑‍💻
感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀
谢谢大家!🙏

定义

合并:把两个或多个已经有序的序列合并成一个

设置三个指针 i , j , k i,j,k i,j,k ,对比 i , j i,j i,j所指元素,选择一个更小的放入 k k k 所指的位置

只剩一个子表未合并时,可以将该表中剩余元素全部加到总表

二路归并

也就是上面的过程↑:二合一

四路归并

设置五个指针 p 1 , p 2 , p 3 , p 4 , k p_1,p_2,p_3,p_4,k p1,p2,p3,p4,k ,对比 p 1 , p 2 , p 3 , p 4 p_1,p_2,p_3,p_4 p1,p2,p3,p4 所指元素,选择一个更小的放入 k k k 所指位置

四路归并 —— 每选出一个小元素需要对比关键字3次

代码实现

int *B = (int *) malloc (n * sizeof(int));  // 辅助数组B// A[low...mid]和A[mid+1,...,high]各自有序,将两个部分合并
void Merge(int A[], int low, int mid, int high){int i, j, k;for(k = low; k <= high; k++)B[k] = A[k];  // 将A中所有元素复制到B中for(i = low, j = mid + 1, k = i; i <= mid && j <= high; k++){if(B[i] <= B[j])A[k] = B[i++];  // 将较小的值复制到A中elseA[k] = B[j++];}while(i <= mid) A[k++] = B[i++];while(j <= high) A[k++] = B[j++];
}void MergeSort(int A[], int low, int high){if(low < high){int mid = (low + high) / 2;  // 从中间划分MergeSort(A, low, mid);  // 对左半部分归并排序MergeSort(A, mid + 1, high);  // 对右半部分归并排序Merge(A, low, mid, high);  // 归并}
}

算法效率分析

2路冰柜的归并树,形态上就是一棵倒立的二叉树

结论
n个元素进行2路归并排序,归并趟数 = l o g 2 n =log_2n =log2n
每趟归并时间复杂度为 O ( n ) O(n) O(n),则算法时间复杂度为 O ( n l o g 2 n ) O(nlog_2n) O(nlog2n)
空间复杂度 = O ( n ) =O(n) =O(n),来自辅助数组B

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

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

相关文章

Linux容器时间隔离性测试

在宿主机和容器内同时执行date命令获取时间 date可以看到宿主机和容器内的时间一致 在宿主机修改时间 date -s "2022-01-01 12:00:00"在宿主机和容器内同时执行date命令获取时间 date 可以看到时间都修改为了2022年 在宿主机执行命令将时间修改回去 sudo date -s &qu…

《云原生安全攻防》-- 容器攻击案例:Docker容器逃逸

当攻击者获得一个容器环境的shell权限时&#xff0c;攻击者往往会尝试进行容器逃逸&#xff0c;利用容器环境中的错误配置或是漏洞问题&#xff0c;从容器成功逃逸到宿主机&#xff0c;从而获取到更高的访问权限。 在本节课程中&#xff0c;我们将详细介绍一些常见的容器逃逸方…

摸鱼大数据——Kafka——kafka tools工具使用

可以在可视化的工具通过点击来操作kafka完成主题的创建&#xff0c;分区等操作 注意: 安装完后桌面不会有快捷方式,需要去电脑上搜索,或者去自己选的安装位置找到发送快捷方式到桌面! 连接配置 创建主题 删除主题 主题下的数据查看 数据显示问题说明 修改工具的数据显示类型 发…

设计模式使用场景实现示例及优缺点(行为型模式——命令模式)

从前&#xff0c;在一个美丽而神秘的王国里&#xff0c;住着一位智慧而仁慈的国王。他不仅以其公正和睿智著称&#xff0c;还因为他对知识的热爱和追求。他的王国繁荣昌盛&#xff0c;人们生活幸福安康。但即便如此&#xff0c;国王知道&#xff0c;要维持这种繁荣与和平&#…

编程参考 - Rule of Three and the Rule of Five in C++

C 中的 "三规则 "和 "五规则 "是管理类中资源管理函数&#xff08;特殊成员函数&#xff09;的准则。这些规则有助于确保类正确一致地管理动态内存、文件句柄或网络连接等资源。 The Rule of Three and the Rule of Five in C are guidelines for managing…

【C++题解】1168. 歌唱比赛评分

问题&#xff1a;1168. 歌唱比赛评分 类型&#xff1a;数组找数 题目描述&#xff1a; 四&#xff08;1&#xff09; 班要举行一次歌唱比赛&#xff0c;以选拔更好的苗子参加校的歌唱比赛。评分办法如下&#xff1a;设 N 个评委&#xff0c;打 N 个分数&#xff08; 0≤每个分…

Linux C语言基础 day10

目录 学习目标&#xff1a; 学习内容&#xff1a; 1.指针指向数组 1.1 指针与数组的关系 1.2 指针与一维数组关系实现 1.2.1 指针与一维数组的关系 1.2.2 指针指向一维整型数组作为函数参数传递 课外作业&#xff1a; 学习目标&#xff1a; 一周掌握 C基础知识 学习内…

卡码网语言基础课 | 10. 平均绩点

目录 1、问题描述2、知识点① 字符串格式化输出② 保留小数 3、代码 1、问题描述 题目描述&#xff1a;每门课的成绩分为A、B、C、D、F五个等级&#xff0c;为了计算平均绩点&#xff0c;规定A、B、C、D、F分别代表4分、3分、2分、1分、0分。 输入描述&#xff1a;有多组测试…

RandomAccessFile详细总结

RandomAccessFile 是 Java 中一个非常特殊的类&#xff0c;它既可以用来读取文件&#xff0c;也可以用来写入文件。与其他 IO 类&#xff08;如 FileInputStream 和 FileOutputStream&#xff09;不同&#xff0c;RandomAccessFile 允许您跳转到文件的任何位置&#xff0c;从那…

【全面介绍Pip换源】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

CV11_模型部署pytorch转ONNX

如果自己的模型中的一些算子&#xff0c;ONNX内部没有&#xff0c;那么需要自己去实现。 1.1 配置环境 安装ONNX pip install onnx -i https://pypi.tuna.tsinghua.edu.cn/simple 安装推理引擎ONNX Runtime pip install onnxruntime -i https://pypi.tuna.tsinghua.edu.cn/si…

基于Java的斗地主游戏案例开发(做牌、洗牌、发牌、看牌

package Game;import java.util.ArrayList; import java.util.Collections;public class PokerGame01 {//牌盒//♥3 ♣3static ArrayList<String> list new ArrayList<>();//静态代码块//特点&#xff1a;随着类的加载而在加载的&#xff0c;而且只执行一次。stat…

底软驱动 | C++内存相关

文章目录 C内存相关C内存分区C对象的成员函数存放在内存哪里 堆和栈的区别堆和栈的访问效率“野指针”有了malloc/free为什么还要new/deletealloca内存崩溃C内存泄漏的几种情况内存对齐柔性数组参考推荐阅读 C内存相关 本篇介绍了 C 内存相关的知识。 C内存分区 在C中&#…

力扣第八题——字符串转换整数

题目介绍 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数。 函数 myAtoi(string s) 的算法如下&#xff1a; 空格&#xff1a;读入字符串并丢弃无用的前导空格&#xff08;" "&#xff09;符号&#xff1a;检查下一个字…

TCP重传、滑动窗口、流量控制、拥塞控制机制

目录 1、TCP重传机制超时重传快速重传 2、滑动窗口3、流量控制4、拥塞控制1、慢启动2、拥塞避免3、拥塞发生 1、TCP重传机制 TCP 针对数据包丢失的情况&#xff0c;会用重传机制解决。 超时重传 就是在发送数据时&#xff0c;设定一个定时器&#xff0c;当超过指定的时间还没…

Ctrl+C、Ctrl+V、Ctrl+X 和 Ctrl+Z 的起源

注&#xff1a;机翻&#xff0c;未校对。 The Origins of CtrlC, CtrlV, CtrlX, and CtrlZ Explained We use them dozens of times a day: The CtrlZ, CtrlX, CtrlC, and CtrlV shortcuts that trigger Undo, Cut, Copy, and Paste. But where did they come from, and why do…

文件上传接口

文章目录 开发前端接口 开发前端接口 首先这个前端的文件上传组件使用了,前端组件 首先这个接口不是一般的接口,这个接口可以提取出来,之后那里使用了,就直接放到哪里 所以这是一个万能文件上传接口 写完之后选择 头像组件 在图库中添加组件 写前端组件之后,写了前端的组件…

Bootstrap 5 加载效果

Bootstrap 5 加载效果 Bootstrap 5 是一个流行的前端框架,它提供了丰富的组件和工具,用于快速开发响应式和移动优先的网页。在本文中,我们将探讨 Bootstrap 5 中的加载效果,包括如何实现它们以及它们在网页设计中的作用。 什么是加载效果? 加载效果是在网页或应用程序中…

k8s集群创建devops项目一直等待状态,没有发现host

问题分析&#xff1a; kubesphere在帮我们自动化创建一些智能自动化的额时候难免会发生一些小错误&#xff0c;devops-jenkins是一个部署也会生成一个容器组即pod&#xff0c;容器组的容器服务端口是 targetPort&#xff0c;容器组对外暴露的端口是port&#xff0c;拿devops-c…

[深度学习]基于yolov10+streamlit目标检测演示系统设计

YOLOv10结合Streamlit构建的目标检测系统&#xff0c;不仅极大地增强了实时目标识别的能力&#xff0c;还通过其直观的用户界面实现了对图片、视频乃至摄像头输入的无缝支持。该系统利用YOLOv10的高效检测算法&#xff0c;能够快速准确地识别图像中的多个对象&#xff0c;并标注…