Был в этом в течение нескольких часов, пытаясь заставить реализацию пузырьковой сортировки работать в двойном связанном списке. Мой код, похоже, работает за один проход, но затем завершается преждевременно, не завершая сортировку. Мы будем очень признательны за любые рекомендации.
public void bubbleSort()
{
Node cur = head.getNext();
boolean done = false;
while (!done)
{
done = true;
while(cur != tail)
{
if (cur.getNext().getCount()>cur.getCount())
{
swap(cur.getNext(),cur);
done=false;
}
cur = cur.getNext();
}
}
}
Используемый мной метод подкачки, по-видимому, искажает размещение узлов до тех пор, пока между двумя узлами не образуется круговая петля.
private void swap(Node n1, Node n2)
{
Node b1, b2, a1, a2;
System.out.println("Swapping n1: " + n1 + " with n2: " + n2);
b1 = n2.getPrev();
if (b1 == n1) // handle adjacent nodes
b1 = n2;
a1 = n2.getNext();
b2 = n1.getPrev();
if (b2 == n2) // handle adjacent nodes
b2 = n1;
a2 = n1.getNext();
// swap
n1.setPrev(b1);
n1.setNext(a1);
n2.setPrev(b2);
n2.setNext(a2);
b1.setNext(n1);
a1.setPrev(n1);
b2.setNext(n2);
a2.setPrev(n2);
}
Спасибо