有没有3路归并的代码示例啊??

来源:3-4 自底向上的归并排序算法

慕码人1088981

2018-07-02

写回答

1回答

liuyubobobo

2018-07-03

抱歉,这个课程没有提供三路归并排序的代码:)


实际上,3路归并,乃至多路归并(k路归并),思想都和普通的二分归并排序是一样的,区别只在于归并的过程。课程中的普通二路归并,在归并的过程中,每次从两个子数组中选择最小的元素进行归并;在三路归并中,每次从三个子数组中选择最小的元素进行归并就好了:)进而,k路归并排序,每次就是从k个子数组中选择最小的元素进行归并过程:)如果有兴趣,强烈建议自己写一个三路归并的算法,是一个很好的编程训练:)


对于k路归并的过程中,比较k个元素的大小,可以使用最基础的线性扫描比较;也可以借助优先队列,还可以使用分治的思想解决。如果感兴趣,对于每种方法,都建议可以思考一下,甚至实践一下:)


对于归并k个子数组的元素,Leetcode上也有一道很好的练习题:

英文版:https://leetcode.com/problems/merge-k-sorted-lists/description/

中文版:https://leetcode-cn.com/problems/merge-k-sorted-lists/description/


不过这个问题处理的对象是链表,可以顺便学习(复习)一下和链表相关的操作:)强烈推荐一下。


在我的github上有这个问题的参考代码,如果需要可以参考。有四种解法。传送门:https://github.com/liuyubobobo/Play-Leetcode/tree/master/0023-Merge-k-Sorted-Lists/cpp-0023


加油!:)

2
1
慕码人1088981
非常感谢!
2018-07-03
共1条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11228 学习 · 1617 问题

查看课程