题
有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)