2012-09-26 100 views
0

我一直在努力讓我的泡泡排序工作,現在它似乎陷入了無限循環。泡沫排序陷入無限循環?

我以爲我正在適當增加指針來照顧,但它似乎沒有。如果任何人都可以發現我的發言人應該把它放在適當的位置,那會很棒!

冒泡排序方法:

public static void bubbleSort(DoubleLinkedList list) //static method used to sort the linked list using bubble sort 
     { 
      int i = 0; 
      int j = 0; 
      Node currentNode = list.head; 
      Node previousNode = currentNode; 
      Node tempNext = currentNode; 
      Node tempPrevious = currentNode; 
      Node sentinelNode = currentNode; 


      for(i=1; i<list.getSize(); i++) 
      { 

       while(sentinelNode.getNext() != null) 
       { 
        if(currentNode.getData() > currentNode.getNext().getData()) 
        { 
         if(currentNode == list.head) 
         { 
          Node tempNode = currentNode.getNext(); 

          list.head = tempNode; 
          tempNext = tempNode.getNext(); 

          tempNode.setNext(currentNode); 
          currentNode.setNext(tempNext); 
          currentNode.setPrevious(tempNode); 

          tempNext.setPrevious(currentNode); 
         } 
         else if(currentNode.getNext() == list.last) 
         { 
          Node tempNode = currentNode.getNext(); 
          list.last = currentNode; 
          tempPrevious = currentNode.getPrevious(); 

          tempNode.setNext(currentNode); 
          tempNode.setPrevious(tempPrevious); 

          currentNode.setPrevious(tempNode); 
         } 
         else 
         { 
          Node tempNode = currentNode.getNext(); 
          tempPrevious = currentNode.getPrevious(); 
          tempNext = currentNode.getNext(); 

          tempPrevious.setNext(tempNode); 
          tempNext.setPrevious(currentNode); 

          currentNode.setNext(tempNext); 
          tempNode.setPrevious(tempPrevious); 
         } 

        } 

        sentinelNode = sentinelNode.getNext(); 

       } 
      } 


     } 

回答

0

你的問題是你的其他子句。仔細看看你的設置。首先,你有,

tempNode = currentNode.getNext(); 
tempNext = currentNode.getNext(); 

他們指着同一個對象。當你做

currentNode.setNext(tempNode); 

你沒有改變任何東西,因爲tempNode已經是current.getNext();

正因爲如此,您的sentinelNode在遍歷DoubleLinkedList時遇到問題。