クイックソートが機能しません。パーティション アルゴリズムに何を渡すか、ピボットを管理する方法について特に確信が持てません。ピボットがヘッダー ノードになる場合もあれば、最後のノードになる場合もあります。私のアプローチは、配列のソリューションに基づいています。これが私の試みです。何か案は?パーティショニング アルゴリズムは、単一リンク リスト (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 ;
}
[編集]
これを「その場で」やりたい
このプロセスでヘッドとラストを管理する方法について、特に助けを求めています。
私のアプローチが不可能でない限り、代替案を提案しないでください