Cześć,
Mam problem z posortowaniem listy jednokierunkowej cyklicznej. Z acykliczną nie miałem problemu. Ważne jest to, że sortowanie ma dotyczyć adresów, a nie samych wartości.
Doszedłem to tego, że potrzebuje znać 4 adresy występujące po sobie i dwa środkowe zamieniać z uwzględnieniem zamiany 3 pierwszych adresów na to co będą wskazywać.
Przykładowa lista: A ( 10 ) -> B ( 20 ) -> C ( 11 ) -> D ( 30 ).
Zamiana: A ( 10 ) -> C ( 11 ) -> B ( 20 ) -> D ( 30 ).
Po zamianie lub nie ( jeśli B nie jest większe od C ) to wówczas A = B, B=C, C=D, D=E.
Taka zamiana zadziała dla minimum 4 wartości.
Szukałem rozwiązań, próbowałem sam. Straciłem sporo czasu i nie jestem wstanie tego rozwiązać znając jakby możliwe rozwiązanie. Będę wdzięczny za pomoc.
Aktualna sortowanie samych wartości:
for (int i = 0; i < count; i++)
{
for (int j = 0; j < count - 1; j++)
{
current = current->next;
do
{
previous = current;
current = current->next;
if (previous->data.Value > current->data.Value)
{
swap(current->data.Value, previous->data.Value);
sorted = 1;
}
} while (current != end);
}
if (sorted == 1)
{
return;
}
}