2016-11-06 8 views
0

私がチェックしたところで、正しい最小値と前のノードが見つかりました。その後、私はノードをスワップするだけですが、このコードを実装すると出力は何もありません。選択単一のリンクリストに並べ替え

問題を描いた後、私は問題がソートされていると思ったので、名前をソートしたノードをもう1つ追加しましたが、まだ問題を解決できませんでした。ここで

は私の例のコードは次のとおりです。

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'があります。また、 '> 'の代わりにif(currentInner.Value.CompareTo(minimum.Value)<0)' –

+0

を修正しました。 –

+0

@BatuhanAydın私の以前のソリューションに問題があったので、別の簡単なものを投稿しました。私の更新された答えを見てください。 –

関連する問題