M组N个元素的排序——多路归并排序

有M个数组,每个数组含有N个元素,N个元素是从小到大有序的。要求你将这N*M个元素,从小到大排序到另外一个数组里。

思路

使用多路归并排序。

因为【N个元素是从小到大有序】所以使用M个指针分别指向M个数组的起始元素,【此时的这M个元素分别是M个数组里最小的元素】,再寻找出这M个元素的最小元素就可以放到我们的目标数组里。

"寻找出这M个元素的最小元素"方法(1)——遍历

寻找出这M个元素的最小元素的时间复杂度:

O(M

多路归并的总体时间复杂度:

每次遍历所有序列的当前元素,找到最小的。这样每次找一个元素都要比较M次,假设所有M*N个元素,其总体时间复杂度就达到了O(N*M*M)。

多路归并的总体空间复杂度

O(M)

"寻找出这M个元素的最小元素"方法(1)——小顶堆

寻找出这M个元素的最小元素的时间复杂度:

主要是向下调整,向下调整的时间复杂度为O(h)=O(logM)

多路归并的总体时间复杂度:

O(N*M*logM)

多路归并的总体空间复杂度

O(M)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值