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)

猜你喜欢

转载自blog.csdn.net/chushoufengli/article/details/115112623
今日推荐