可能内存溢出的高级排序算法-归并排序

embedded/2024/9/23 6:41:36/

归并排序

归并排序在经典递归实现中需要的额外空间相对较多。这是因为在归并排序的过程中,需要与原始数组大小相同的额外空间来存储临时合并的数组。所以,其空间复杂度为O(n),其中n表示待排序数组的长度。在递归过程中,需要创建临时数组来存储分割后的子数组,这些临时数组会随着递归的进行不断地被创建和释放。

相比快速排序算法,归并排序在任何情况下都是O(nlogn),而快速排序在最坏的情况下是O(n的平方)

算法代码如下:

class Solution {public int[] sortArray(int[] nums) {return mergeSort(nums, 0, nums.length-1);}public static int[] mergeSort(int[] nums, int l, int r){if(l==r){int[] newsz=new int[1];newsz[0]=nums[l];return newsz;}int mid=(l+r)/2;int[] mergeSort1 = mergeSort(nums, l, mid);int[] mergeSort2 = mergeSort(nums, mid + 1, r);int[] sum=new int[mergeSort1.length+mergeSort2.length];int m=0,i=0,j=0;while (i<mergeSort1.length&&j<mergeSort2.length) {if (mergeSort1[i] <= mergeSort2[j]) {sum[m++] = mergeSort1[i++];} else {sum[m++] = mergeSort2[j++];}}while (j<mergeSort2.length){sum[m++]=mergeSort2[j++];}while (i<mergeSort1.length){sum[m++]=mergeSort1[i++];}return sum;}
}

http://www.ppmy.cn/embedded/17974.html

相关文章

Multitouch 1.27.28 免激活版 mac电脑多点触控手势增强工具

Multitouch 应用程序可让您将自定义操作绑定到特定的魔术触控板或鼠标手势。例如&#xff0c;三指单击可以执行粘贴。通过执行键盘快捷键、控制浏览器的选项卡、单击鼠标中键等来改进您的工作流程。 Multitouch 1.27.28 免激活版下载 强大的手势引擎 精心打造的触控板和 Magic …

【规范】数据库字段命名与Java类属性对应

Java类中建议小驼峰methodId、数据库字段建议method_id mybatisPlus中进行字段映射是就是参照以上规范 当然若不参照规范&#xff0c;就要多很多繁琐注解 TableField(value "returnVal")

网站信息收集小技巧:从js中获得敏感信息

对于web层面的信息收集&#xff0c;主要还是子域名、网站目录和网站链接上面。通过子域名的收集&#xff0c;能够有效的获取到更多的站点&#xff0c;而这些站点里面通常又会包含大量不同的链接和信息。再这里面&#xff0c;很容易就能发现 信息泄露、未授权访问等漏洞 我并不…

代码随想录算法训练营day40

题目&#xff1a;343. 整数拆分、96.不同的二叉搜索树 参考链接&#xff1a;代码随想录 343. 整数拆分 思路&#xff1a;五部曲来走。dp数组&#xff0c;dp[i]用于记录拆i得到的最大乘积和&#xff0c;我们要求的也就是dp[n]&#xff1b;递推公式&#xff0c;我们想拆分i&am…

如何在PostgreSQL中创建一个新的数据库,并指定所有者?

文章目录 解决方案示例代码 PostgreSQL是一个强大的开源关系型数据库管理系统&#xff0c;它允许用户创建和管理多个数据库。在PostgreSQL中创建一个新的数据库并指定所有者是一个常见的操作。下面&#xff0c;我们将详细解释如何执行这一操作&#xff0c;并提供示例代码。 解…

模板(二)

文章目录 模板&#xff08;二&#xff09;1 非类型模板参数2. 模板的特化2.1. 概念2.2 函数模板特化2.3 类模板特化2.3.1 全特化2.3.2 偏特化2.3.3 类模板特化应用示例 3 模板的分离编译3.1 什么是分离编译3.2 模板的分离编译3.3 解决方法 4. 模板总结 模板&#xff08;二&…

Java 变得越来越像 Rust?

随着编程技术的增强和复杂性的提升&#xff0c;许多编程语言也纷纷效仿&#xff0c;Java 也不例外。 另一边&#xff0c;尽管社区内部问题重重&#xff0c;但 Rust 仍逐年获得开发人员的喜爱。这背后都是有原因的&#xff1a;Rust 的编译器让开发人员避免了各种问题。编译器对…

Access2019直接将数据导入SQL Server数据库中,再直接链接回来

Access2019 的数据表等&#xff0c;除了通过 SSMA 导入数据库外&#xff0c;还可以利用access2019 自身的外部数据导出功能来达到目的。本文将详细介绍这一操作过程。 一、命令行操作阶段 1.以SA这一超级用户登录SQL Server&#xff0c;创建一个数据库&#xff0c;例如“个人…