2016-11-06 82 views
0

當我檢查,我找到正確的最小值和前一個節點。之後,我需要做的唯一事情就是交換節點,但是在實現這個代碼之後,輸出什麼也沒有。選擇排序在單鏈表

繪製問題後,我認爲問題是排序部分。因此,我添加了一個名稱排序的節點,但仍然無法解決我的問題。

這裏是我的示例代碼:

public void selectionSort() 
{    
    Node<T> first = head; 
    Node<T> previous = head; 
    Node<T> minimum = head; 
    Node<T> compare; 
    Node<T> temp; 
    Node<T> sorted = head;   
    while (first.Next != null) 
    { 
     sorted = minimum; // with this I'm finding the last sorted node 
     minimum = first; 
     compare = first.Next; 
     while (compare.Next != null) 
     { 
     if (minimum.Value.CompareTo(compare.Next.Value) > 0) 
     { 
      previous = compare; // Need previous node to changing connections 
      minimum = compare.Next; // Saving minimum value 
     } 
     compare = compare.Next; 
     } 
     // Swapping nodes 
     temp = first; 
     previous.Next = first; 
     first.Next = minimum.Next; 
     minimum.Next = temp.Next; 
     if (temp != head) 
     { 
      sorted.Next = minimum; // Adding minimum node to sorted part 
     } 
      first = first.Next; 
     }    
    } 

回答

0

我在你的代碼改名一些變量更有意義的:

  • currentOuter跟蹤外環當前節點
  • currentInner跟蹤內環中的當前節點

通過交換實現價值/數據,而不是由節點簡化了代碼很多:

public void selectionSort<T>(Node<T> head) where T:IComparable 
{ 
    Node<T> currentOuter = head; 

    while (currentOuter != null) 
    { 
     Node<T> minimum = currentOuter; 
     Node<T> currentInner = currentOuter.Next; 

     while (currentInner != null) 
     { 
      if (currentInner.Value.CompareTo(minimum.Value) < 0) 
      { 
       minimum = currentInner; 
      } 

      currentInner = currentInner.Next; 
     } 

     if (!Object.ReferenceEquals(minimum, currentOuter)) 
     { 
      T temp = currentOuter.Value; 
      currentOuter.Value = minimum.Value; 
      minimum.Value = temp; 
     } 

     currentOuter = currentOuter.Next; 
    } 
} 
+0

我改變的時候開始work.Thank您在代碼中的幾件事情!而不是'Null','null'.Also'if(currentInner.Value.CompareTo(minimum.Value)<0)',而不是'>' –

+0

修正了這些,謝謝! –

+0

@BatuhanAydın我以前的解決方案存在問題,所以我發佈了一個不同的,更簡單的解決方案。看到我更新的答案。 –