不理解自底向上的归并排序为何适用于链表的排序

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

精慕门8491163

2019-06-01

关于自底向上的归并排序中“由于排序的过程,没有用到通过数组的索引获取值的特性,因此适合用于链表的排序”

_merge函数中,不也是要通过索引访问值么,是不是本质上是因为这里面通过i,j,k来访问元素的特性,很适合于链表的节点访问??

写回答

1回答

liuyubobobo

2019-06-02

_merge通过索引访问值,这是因为我们的底层数据结构是数组。


但仔细观察,你就会发现,_merge函数不会跳跃访问元素(这是和快排本质不同的地方)。我们只需要顺次访问元素就可以。而链表,相当于只提供顺次访问的功能。所以,归并排序的思路可以很容易地应用于链表。


在这里,我建议你感兴趣,尝试实现一个链表的merge操作,再体会一下。


Leetcode 21号问题就是这个问题:https://leetcode.com/problems/merge-two-sorted-lists/

我的参考代码:https://github.com/liuyubobobo/Play-Leetcode/tree/master/0021-Merge-Two-Sorted-Lists/cpp-0021


加油!:)

0
3
BYMS
回复
liuyubobobo
回复 liuyubobobo谢谢老师
2021-07-02
共3条回复

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

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

11187 学习 · 1614 问题

查看课程