2012-09-26 5 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를 통해 반복하는 데 문제가 있기 때문입니다.

관련 문제