我的快速排序不起作用。我特别不确定要传递给分区算法的内容以及如何管理枢轴,因为在一种情况下它成为头节点,在另一种情况下成为最后一个节点。我的方法基于数组的解决方案。这是我的尝试。有任何想法吗?请注意,选择分区算法是为了适应单向链表 (SLL) 的单向特性。
public static SLL quickSort(SLL list, SLLNode first, SLLNode last)
{
if (first != null && last != null)
{
SLLNode p = partition(list, first, last) ;
quickSort(list,first,p) ;
quickSort(list,p.succ, last) ;
}
return list ;
}
public static SLLNode partition(SLL list, SLLNode first, SLLNode last)
{
//last.succ = null ;
SLLNode p = first ;
SLLNode ptr = p.succ ;
while (ptr!=null)
{
if (ptr.data.compareToIgnoreCase(p.data)<0)
{
String pivot = p.data ;
p.data = ptr.data ;
ptr.data = p.succ.data ;
p.succ.data = pivot ;
p = p.succ ;
}
ptr = ptr.succ ;
}
return p ;
}
[编辑]
我想“就地”做这个
我正在寻找有关如何在此过程中管理头部和尾部的帮助。
请不要提出替代方案,除非我的方法是不可能的