/ / Quick Sort usando recursão em uma lista vinculada - java, classificação, recursão, lista vinculada

Classificação rápida usando recursão em uma lista vinculada - java, classificação, recursão, lista vinculada

Eu tenho que fazer uma ordenação rápida com recursão em uma lista vinculada .... Até agora, eu estive bem, mas encontrei um pequeno problema que não consigo entender para descobrir por que não está funcionando corretamente.

Aqui está o objeto Nó:

    public class Node
{
String name;
Node next;
}

Aqui está o código do programa:

    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);
}

}

Aqui está a impressão:

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.

O resultado final deve ser C, D, P, R, Z. mas por algum motivo o programa está substituindo Z para outro R. O que há de errado com o código?

Respostas:

2 para resposta № 1

Possível dica: tenha cuidado com o que isso temp A variável está apontando para quando você a usa para trocar o nome.


1 para resposta № 2

Com relação a isso, parece uma tarefa tola. O Quiksort em uma lista vinculada será qualquer coisa mas rápido. A idéia é usar matrizes. Qual é o objetivo aqui?