我们知道数组是支持随机访问(O(1))的,而链表由于是节点串起来的,每次访问必须得从头开始遍历,查找的平均时间复杂度是O(N)。
很多基本排序算法:冒泡;堆排序等对单链表排序就不是很合适了,下面介绍针对链表排序的归并算法。
- 时间复杂度:O(N*logN);
- 稳定性:稳定
主要思路:
找到链表的中间节点,然后递归的对链表的前半部分和后半部分分别进行归并排序,完成之后再合并即可。
参考代码:
下面是利用快慢指针寻找中间节点的代码:
我们知道数组是支持随机访问(O(1))的,而链表由于是节点串起来的,每次访问必须得从头开始遍历,查找的平均时间复杂度是O(N)。
很多基本排序算法:冒泡;堆排序等对单链表排序就不是很合适了,下面介绍针对链表排序的归并算法。
- 时间复杂度:O(N*logN);
- 稳定性:稳定
主要思路:
找到链表的中间节点,然后递归的对链表的前半部分和后半部分分别进行归并排序,完成之后再合并即可。
参考代码:
下面是利用快慢指针寻找中间节点的代码: