在這裏已經試了幾個小時試圖讓氣泡排序的實現工作在雙鏈表上。我的代碼似乎只能通過一次,但是沒有完成排序就提前完成。任何指導將不勝感激。雙鏈表上的氣泡排序
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);
}
感謝
爲什麼不寫一個比較器http://javarevisited.blogspot.com/2011/06/comparator-and-comparable-in-java.html – lichengwu 2013-02-24 03:29:53
在一個鏈表中,交換一個元素及其直接後繼是一個特例。那個案例經過測試?您需要返回到外循環的每次迭代的列表的開頭。 – 2013-02-24 03:41:51
爲簡單列表逐步運行代碼,並觀察其行爲。 – 2013-02-24 04:31:55