【发布时间】:2011-02-23 12:52:01
【问题描述】:
我必须在链表上使用递归进行快速排序......到目前为止我还不错,但是我遇到了一个小问题,我看不出它为什么不能正常工作.
这里是对象节点:
public class Node
{
String name;
Node next;
}
这是程序的代码:
public class QuickSortRecusionLinkedList
{
public static void quickS(int start, int finish, Node head, Node tail)
{
int left = start;
int right = finish;
Node pivot = head;
for(int i = 0; i < ((left+right)/2); i++)
{
pivot = pivot.next;
}
Node temp = new Node();
Node leftN = head;
Node rightN = head;
while(right > left)
{
leftN = head;
for(int i = 0; i < left; i++)
{
leftN = leftN.next;
}
while ((leftN.name).compareToIgnoreCase((pivot.name))<0)
{
left = left + 1;
leftN = leftN.next;
}
rightN = head;
for(int i = 0; i < right; i++)
{
rightN = rightN.next;
}
while ((pivot.name).compareToIgnoreCase((rightN.name))<0)
{
right = right - 1;
rightN = head;
for(int i = 0; i < right; i++)
{
rightN = rightN.next;
}
}
if ( left <= right
)
{
temp.name = leftN.name;
leftN.name = rightN.name;
rightN.name = temp.name;
left = left +1;
leftN = leftN.next;
right = right -1;
rightN = head;
for(int i = 0; i < right; i++)
{
rightN = rightN.next;
}
int size = 1;
temp = head;
while (temp!=tail)
{
temp = temp.next;
size++;
}
temp = head;
while(temp != tail)
{
System.out.print(temp.name + ", ");
temp = temp.next;
}
System.out.println(tail.name + ".");
}
}
if(start < right)
quickS(start, right, head, tail);
if(left < finish)
quickS(left, finish, head, tail);
}
public static void main(String[] args)
{
Node head = new Node();
Node tail = new Node();
Node a = new Node();
Node b = new Node();
Node c = new Node();
head.name = "R";
tail.name = "D";
a.name = "Z";
b.name = "C";
c.name = "P";
head.next = a;
a.next = b;
b.next = c;
c.next = tail;
int size = 0;
Node temp = head;
while (temp!= tail)
{
temp = temp.next;
size++;
}
quickS(0,size,head,tail);
}
}
这是打印输出:
C, Z, R, P, D.
C, Z, R, P, D.
C, D, R, P, Z.
C, D, P, R, R.
C, D, P, R, R.
C, D, P, R, R.
最终结果应该是C, D, P, R, Z。但由于某种原因,该程序正在用Z 替换另一个R。代码有什么问题?
【问题讨论】:
-
重新格式化代码或将其粘贴。
-
使用调试器时看到了什么?
-
首先,我不知道如何编辑代码以使其正常,而不是像我现在拥有的那样奇怪......这是我能做到的最好的对不起。跨度>
-
这是作业吗?如果没有,为什么不直接使用 Collections.sort?
-
了解调试器的好机会。
标签: java sorting recursion linked-list