1.2.1 归并排序

归并排序原理

1) 整体就是一个简单递归, 左边排好序、 右边排好序、 让其整体有序
2) 让其整体有序的过程里用了外排序方法
3) 利用master公式来求解时间复杂度
4) 归并排序的实质
时间复杂度O(N*logN),额外空间为O(N).

code1

from test1 import  *def merge(arr, l, mid, r):  # arrhelp = [0] * (r - l + 1)i = 0p1 = lp2 = mid + 1while p1 <= mid and p2 <= r:if arr[p1] <= arr[p2]:  # 左侧小于等于右侧,拷贝左侧; ==时,默认拷贝右边help[i] = arr[p1]i += 1p1 += 1else:help[i] = arr[p2]i += 1p2 += 1while p1 <= mid:     # 只剩下左侧, 把左侧拷贝到help数组help[i] = arr[p1]i += 1p1 += 1while p2 <= r:    # 只剩下右侧侧, 把右侧拷贝到help数组help[i] = arr[p2]  i += 1p2 += 1# help copy to arrfor i in range(r-l+1):arr[l+i] = help[i]returndef mergeSort1(arr, l, r):if l == r:returnmid = l + ((r - l) >> 1)mergeSort1(arr, l, mid)mergeSort1(arr, mid + 1, r)merge(arr, l, mid, r)returndef mergeSort(arr):if arr == None or len(arr) < 2:returnmergeSort1(arr, 0, len(arr) - 1)

test

# for test
def main():testTime =  500000              # 500000maxSize = 100maxValue = 100succeed = Truefor i in range(testTime):arr1 = generateRandomArray(maxSize, maxValue)arr2 = copyArray(arr1)mergeSort(arr1)             # ------------------test------comparator(arr2)if (not isEqual(arr1, arr2)):succeed = FalseprintArray(arr1)printArray(arr2)breakif succeed:print("Nice!")else:print("Fucking fucked!")arr = generateRandomArray(maxSize, maxValue)printArray(arr)mergeSort(arr)printArray(arr)if __name__ == '__main__':main()

时间复杂度

1. T(N) = 2 T(N / 2) + O(N)根据master公式, 时间复杂度 O(NlongN)选择、冒泡、插入排序的比较行为没有保留下来。
归并排序的比较行为被保留下来,变成了整体有序的部分。因而时间复杂为O(NlogN)

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

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

相关文章

MySQL数据库笔记——多版本并发控制MVCC

大家好&#xff0c;这里是Good Note&#xff0c;关注 公主号&#xff1a;Goodnote&#xff0c;本文详细介绍MySQL的并发控制&#xff1a;多版本并发控制MVCC。 文章目录 背景介绍数据库并发控制——锁机制悲观锁和乐观锁悲观锁乐观锁 数据库并发控制——MVCC 的引入MVCC 和锁机…

内部类 --- (寄生的哲学)

内部类总共有 4 种&#xff08;静态内部类、非静态内部类、局部内部类、匿名内部类&#xff09; 作用&#xff1a; 一&#xff1a;内部类提供了更好的封装&#xff0c;可以把内部类隐藏在外部类之内&#xff0c;不允许同一个包中的其他类访问该类。 二&#xff1a;内部类可以…

电脑里msvcr120.dll文件丢失怎样修复?

电脑里msvcr120.dll文件丢失的修复指南 在电脑的日常使用中&#xff0c;我们可能会遇到各种各样的系统文件丢失问题&#xff0c;其中msvcr120.dll文件的丢失就是较为常见的一种。作为一名在软件开发领域深耕多年的从业者&#xff0c;我将为大家详细解析msvcr120.dll文件的重要…

今日头条ip属地根据什么显示?不准确怎么办

在今日头条这样的社交媒体平台上&#xff0c;用户的IP属地信息对于维护网络环境的健康与秩序至关重要。然而&#xff0c;不少用户发现自己的IP属地显示与实际位置不符&#xff0c;这引发了广泛的关注和讨论。本文将深入探讨今日头条IP属地的显示依据&#xff0c;并提供解决IP属…

理解linux内核中的几种地址

1. 前言 《Linux内核完全注释》这本书提到了几种Linux内核中的几种地址&#xff0c;实地址&#xff0c;有虚拟地址&#xff0c;逻辑地址&#xff0c;线性地址&#xff0c;物理地址。除了物理地址以外&#xff0c;其他几种容易弄混淆。这里做一下笔记&#xff0c;讲一下我的理解…

【Rust自学】10.3. trait Pt.1:trait的定义、约束与实现

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 题外话&#xff1a;trait的概念非常非常非常重要&#xff01;&#xff01;&#xff01;整个第10章全都是Rust的重难点&#xff01;&#x…

Java List 集合详解:基础用法、常见实现类与高频面试题解析

正文 在 Java 集合框架中&#xff0c;List 是一个非常重要的接口&#xff0c;广泛用于存储有序的元素集合。本文将带你深入了解 List 接口的基本用法、常见实现类及其扩展&#xff0c;同时通过实际代码示例帮助你快速掌握这些知识。 &#x1f449;点击获取2024Java学习资料 1…

大白话拆解——多线程中关于死锁的一切(七)(已完结)

前言&#xff1a; 25年初&#xff0c;这个时候好多小伙伴都在备战期末 小编明天还有一科考试&#xff0c;日更一篇&#xff0c;今天这篇一定会对小白非常有用的&#xff01;&#xff01;&#xff01; 因为我们会把案例到用代码实现的全过程思路呈现出来&#xff01;&#xff…

ROS节点架构设计:提高模块化与可扩展性

在 ROS2&#xff08;Robot Operating System 2&#xff09;的开发中&#xff0c;节点的架构设计是构建高效、稳定和可扩展机器人系统的基石。一个设计良好的节点架构不仅有助于提升系统的模块化水平&#xff0c;还能极大地增强代码的可维护性。本文将深入探讨 ROS2 中的三种常见…

GitLab集成Runner详细版--及注意事项汇总【最佳实践】

一、背景 看到网上很多用户提出的runner问题其实实际都不是问题&#xff0c;不过是因为对runner的一些细节不清楚导致了误解。本文不系统性的介绍GitLab-Runner&#xff0c;因为这类文章写得好的特别多&#xff0c;本文只汇总一些常几的问题/注意事项。旨在让新手少弯路。 二、…

《数据结构》期末考试测试题【中】

《数据结构》期末考试测试题【中】 21.循环队列队空的判断条件为&#xff1f;22. 单链表的存储密度比1&#xff1f;23.单链表的那些操作的效率受链表长度的影响&#xff1f;24.顺序表中某元素的地址为&#xff1f;25.m叉树第K层的结点数为&#xff1f;26. 在双向循环链表某节点…

「Mac畅玩鸿蒙与硬件54」UI互动应用篇31 - 滑动解锁屏幕功能

本篇教程将实现滑动解锁屏幕功能&#xff0c;通过 Slider 组件实现滑动操作&#xff0c;学习事件监听、状态更新和交互逻辑的实现方法。 关键词 滑动解锁UI交互状态管理动态更新事件监听 一、功能说明 滑动解锁屏幕功能包含以下功能&#xff1a; 滑动解锁区域&#xff1a;用…

螺栓松动丢失腐蚀生锈检测数据集VOC+YOLO格式504张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;504 标注数量(xml文件个数)&#xff1a;504 标注数量(txt文件个数)&#xff1a;504 标注…

Postman测试big-event

报错500。看弹幕&#xff0c;知道可能是yml或sql有问题。 所以检查idea工作台&#xff0c; 直接找UserMapper检查&#xff0c;发现完全OK。 顺着这个error发现可能是sql有问题。因为提示是sql问题&#xff0c;而且是有now()的那个sql。 之后通过给的课件&#xff0c;复制课件…

如何使用大语言模型进行事件抽取与关系抽取

诸神缄默不语-个人CSDN博文目录 文章目录 1. 什么是事件抽取与关系抽取&#xff1f;2. 示例&#xff1a;使用大语言模型进行事件抽取与关系抽取 1. 什么是事件抽取与关系抽取&#xff1f; 事件抽取是指从文本中识别出与某些“事件”相关的信息。这些事件通常包括动作、参与者、…

NAT网络技术

NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;是一种常用的网络技术&#xff0c;主要用于在私有网络和公共网络之间转换IP地址。在家庭和小型企业网络当中用的比较多。它的主要功能有IP地址重用和增强网络的安全性。   NAT允许一个整个网…

SpringBoot框架开发中常用的注解

文章目录 接收HTTP请求。RestController全局异常处理器Component依赖注入LombokDataBuildersneakyThrowsRequiredArgsConstructor 读取yml文件配置类注解 接收HTTP请求。 RequestMapping 接收HTTP请求。具体一点是 GetMapping PostMapping PutMapping DeleteMapping 一共…

FFmpeg(音视频处理的瑞士军刀)开发实战指南

【欢迎关注编码小哥&#xff0c;学习更多实用的编程方法和技巧】 FFmpeg开发实战指南 1. FFmpeg简介 开源多媒体处理框架支持音视频编解码跨平台&#xff08;Windows/Linux/Mac&#xff09; 2. 环境准备 2.1 安装FFmpeg # Ubuntu sudo apt-get install ffmpeg libavcodec-…

洛谷B4071 [GESP202412 五级] 武器强化

题目传送门&#xff01; 思路 我愿称之为gesp5史上最难想。。。 做法&#xff1a;贪心模拟&#xff08;or二分&#xff09; 对于贪心算法来说&#xff0c;最最最无法理解的地方&#xff1a;选择价格最低的配件来转换&#xff0c;还是选择拥有最多配件的其他武器来转换。 选…

TVS二极管选型【EMC】

TVS器件并联在电路中&#xff0c;当电路正常工作时&#xff0c;他处于截止状态&#xff08;高阻态&#xff09;&#xff0c;不影响线路正常工作&#xff0c;当线路处于异常过压并达到其击穿电压时&#xff0c;他迅速由高阻态变为低阻态&#xff0c;给瞬间电流提供一个低阻抗导通…