今天中午在Lintcode上刷了一道题——链表排序
题目很短:
在 O(n log n) 时间复杂度和常数级的空间复杂度下给链表排序。
最近几天也在做排序算法的实验,所以看到这道题想刷一下。
从题目的要求我们可以大概的想出几种能达到要求的排序:
这里是归并排序的实现:
归并排序的大概思路是:
在待排序列中找到中间元素,将待排序列分成两个待排序列,分别对这两个待排序列递归地调用归并排序,当待排序列中元素只剩一个时,序列显然有序。
现在只需要将两个有序序列合并成一个有序序列。
实现:
这里的难点就是找出中间元素,将一个序列分成两个序列,这里的实现是快慢指针
来实现的,即: