题目要求:合并两个已有序序列为A[0…i],A[i+1…N-1] 为A[0...N-1], 要求不用或者只使用常量辅助空间

为叙述方便,表示A[0…i]为a[0..n-1],A[i+1…N-1]为b[0…m-1],问题实际上是使用常数辅助空间的归并排序

不用辅助空间的归并排序

思路如下:如果a[0] 小于b[0],问题变为合并a[1..n-1]和b[0…m-1],还是同一个问题迭代解决

否则,即a[0]大于b[0],交换两个元素,此时b[0]可能大于b[1], 用冒泡排序的方法将b[0]向右移动合适的位置,接下来问题也变为合并a[1..n-1]和b[0…m-1],迭代解决。

复杂度分析:考虑一种极端情况,前半部分的元素全部大于后半部分,即a中的所有元素都大于b中的元素,这时以第一个元素为例,比较次数为1+(m-1)=m, m-1次为冒泡移动的比较次数,所以合并的复杂度为m+(m-1)+(m-2)+..=1= m*(m+1)/2,在此说明,这时一种极端情况。当前部分元素完全小于后部分是,则元素比较次数为n。如果一个完整的归并排序使用这种方法,则最坏复杂度为T(n)=2T(n/2)+ (n/2)*(n/2 +1)=2T(n/2) + n(n+1)/4,取极限为n(n+1)/2,即此时归并排序的复杂度和冒泡排序已经一样,从这一点来看和快排还是很相似的。

使用k个辅助空间的归并排序,k远远小于元素数目,辅助数组为c[k]

原理类似,将a[0…k-1]移到c[0…k-1]中,然后用常规方法将b[0..m-1]和c[0…k-1]归并k个元素到位置a[0…k-1],比较次数为k,假设此时数组c中剩余的元素为c[t…k-1],则此时数组b中前端必然也空出了k—t个位置,即b[0..k-t-1]必然没有元素。接下将b[k-t…m-1]和c[t…k-1]归并到b中的前端空位,比较次数最多为m, 数组c变为空,现在问题变成了归并a[k…n-1] 和b[0…m-1]了,迭代解决,注意终止条件。

复杂度分析:每次迭代的最多比较次数为将k+m,一共有n/k次迭代,所以总复杂度为(k+m)*(n/k)=n+(nm)/k,当k=n时即是原来的归并排序复杂度(nlogn),当k=1时即为不用辅助空间的排序复杂度n^2。

再次说明,上述的n^2复杂度都是基于初始序列完全逆序的极端情况,个人认为,平均情况下使用辅助空间的渐进复杂度复杂度应该也是对数级。

转载于:https://www.cnblogs.com/gaoyanqing/p/4310800.html

不用辅助空间的归并排序相关推荐

  1. 归并排序(O(n)辅助空间)与原地递归排序(O(1)辅助空间)

    归并排序 归并排序是将一个序列划分为同样大小的两个子序列,然后对两个子序列分别进行排序,最后进行合并操作,将两个子序列合成有序的序列.在合成的过程中,一般的实现都需要开辟一块与原序列大小相同的空间,以 ...

  2. B站怎么下载视频中的音乐(不用辅助工具)

    B站怎么下载视频中的音乐(不用辅助工具) 工具:手机 电脑没试,电脑貌似可以通过某种软件直接下载整个视频/音频吧-- 现在软件都贼精贼精,推荐先自定义下载目录,不然难找 1.先下载好视频(直接点缓存) ...

  3. 地理信息辅助空间决策

    1.决策嘛,都是领导们的事情. 对于我们这些地理信息从业人员而言,每天面对的不是数据.图形,就是代码.系统,地理信息辅助空间决策这一行为常常是一个虚无缥缈的东西.偶尔也会在一些材料或者报告里面看到地理 ...

  4. 《SMPTE 291M - 1998 辅助数据包与辅助空间格式化》 阅读整理

    1.范围 1.1 该标准指明了10bit视频流中辅助数据空间的格式化结构. 1.2 辅助数据包的可用空间在描述连接接口的文档中定义. 1.3 依照SMPTE标准进行格式化的辅助数据包被认为是注册的格式 ...

  5. 非oracle用户使用expdp,expdp 和impdp使用之一(不同用户和不用表空间)

    1.创建DIRECTORYSQL> create or replace directory dir_dp as '/fol/dir_dp'; Directory created. 2.授权SQL ...

  6. python 旋转矩阵_【每日算法Day 93】不用额外空间,你会旋转一个矩阵吗?

    第 100 天时,我可能会对这 100 天以来的算法题进行一个总结,然后暂时停止更新 LeetCode 题解了. 下一步可能更新 NLP 相关算法了,非常感谢大家每天的支持. 题目链接 LeetCod ...

  7. 不用额外空间,链接二叉树同一层的每个node

    比如:            0        1       2    3      4         5       6          7 1->2 3->4->5 6-& ...

  8. 循环右移,要求时间复杂度为O(n)且尽可能的少使用辅助空间

    #include<iostream> using namespace std; #define ARRAY_LENGTH 9 int main(){extern void shiftRig ...

  9. 10种排序算法基础总结

    基于比较的排序: 基础排序:  冒泡排序:谁大谁上,每一轮都把最大的顶到天花板 效率太低--掌握swap. 选择排序:效率较低,但经常用它内部的循环方式来找最大值和最小值. 插入排序:虽然平均效率低, ...

最新文章

  1. 更新 FrameWork
  2. 差异备份、增量备份、完全备份的区别
  3. Angular [(ngModel)]的ng-dirty设置时机
  4. python逻辑运算符or的短路求值特性_[Python]计算闰年时候出现的and和or优先级的问题以及短路逻辑...
  5. 台式电脑麦克风_还有人买台式PC吗?这份新品推荐攻略值得收藏
  6. Notes on UNPv1 Ch.5
  7. 问题六十二:怎么求一元十次方程在区间内的所有不相等的实根(2)——修正“区间端点零值”问题
  8. c#二叉树 取叶子节点个数_「leetcode」222.完全二叉树的节点个数
  9. 输入某班C语言考试成绩,人数未知,用-1作为结束标志,若大于100分,则重新输入,计算全班的最高分、最低分与平均分
  10. 韩语在线翻译图片识别_最强文字识别APP
  11. rovio视觉里程计的笔记
  12. idb 怎么回复mysql_MySQL删除idb文件引发的思考
  13. DSPE-PEG11-Mal含有马来酰亚胺基团的PEG试剂
  14. 关于笔记本电脑蓝牙设置开关消失的处理方法
  15. 5、hibernate第六课
  16. Mysql之子查询20221016
  17. 每日一学:Python 将时间戳转换为指定格式日期
  18. 第8章 第七天 - 电影网站整合/集成到公众号
  19. 美容店信息管理系统与小程序设计与实现
  20. 代理模式(一):代理模式概述,代理模式结构与实现

热门文章

  1. python文件读写的重难点_Python读写文件需要注意的地方
  2. 99款高质量免费HTML/CSS模板(看到了还行,推荐给大家)
  3. 客户端和服务端的区别
  4. arp miss攻击_S交换机有ARP Miss告警,怎么办?
  5. 实战:Flink1.12异步IO访问外部数据-Mysql
  6. python给arcgis中图层字段批量赋值
  7. 华为Android面试真题解析,附赠课程+题库
  8. PTA 7-5 彩虹瓶
  9. TPM零知识学习四 —— tpm2-tss源码安装
  10. tyvj 1143 飘飘乎居士的约会 走迷宫(可穿墙一次)