【本文链接】
http://www.cnblogs.com/hellogiser/p/quick-sort-of-array-and-linked-list.html
【题目】
单链表的特点是:单向。设头结点位head,则最后一个节点的next指向NULL。如果只知道头结点head,请问怎么将该链表排序?
【分析】
对于数组的快排:有2种方式。
(1)指针相向移动:一个指针i指向头,一个指针j指向尾,然后两个指针相向运动并按一定规律交换值,最后找到一个支点p使得支点左边的值小于支点,支点右边的值大于支点。由于单链表只有next指针,没有前驱指针,因此这种方法行不通。
(2)指针同向移动:两个指针i和j,这两个指针均往数组的右方移动,移动的过程中保持i之前的值都小于选定的key,i和j之间的值都大于选定的key,那么当j走到末尾的时候便完成了一次支点的寻找。这个思路非常适合单链表。
对于数组,我们很容易写出下面的代码。
【代码1】
C++
Code
1 |
/* |
【代码2】
C++
Code
1 |
/* |
对于链表而言,借鉴(2)指针同向移动的思想容易改成如下代码。
【代码】
C++
Code
1 |
/* |
【参考】
http://blog.csdn.net/wumuzi520/article/details/8078322
【本文链接】
http://www.cnblogs.com/hellogiser/p/quick-sort-of-array-and-linked-list.html
63.如何对单链表进行快排?和数组快排的分析与对比[quicksort of array and linked
list]