2016-04-18 12 views
0

次のコードは、2次元のポインタ配列の1列ソート機能しない:2-Dポインタ配列をソートこれは、ほとんどの場合で動作C++:選択ソートは、特定のインスタンス

void sort(int** rowReferences, int rowCount, int colCount, int sortColumn) { 
    int pos, lower, temp; 

    for (int p = 0; p < rowCount; p++) 
    { 
     pos = p; 
     lower = rowReferences[p][sortColumn]; 
     for (int j = p + 1; j < rowCount; j++) { 
      if (rowReferences[j][sortColumn] < lower) { 
       pos = j; 
       lower = rowReferences[j][sortColumn]; 
      } 

     temp = rowReferences[p][sortColumn]; 
     rowReferences[p][sortColumn] = rowReferences[pos][sortColumn]; 
     rowReferences[pos][sortColumn] = temp; 
     } 
    } 
} 

が、それはdoesnの特定の列でかなり正しい方向に進む。

列値

がこの順序である:2、0、-1、1、3

ソート機能を表示した後、この順序を返す:-1、0、2、1、3

としてあなたが見ることができる、最初の2つの値の並べ替えが動作しますが、それ以降は分解されます。このインスタンスで選択ソートを変更するにはどうすればよいですか?

編集*寛大PaulMcKenzieによって提供 最小、完全、検証可能例:http://ideone.com/lXHFHE

+0

あなたはデバッグしていませんこれらの5つの値を使用して自分自身ですか? – PaulMcKenzie

+0

このメソッドをrowCount = 5で呼び出していますか? – farzadshbfn

+1

あなたは[この例](http://ideone.com/lXHFHE)のように[mcve]を提供しているはずです – PaulMcKenzie

答えて

1

コード

temp = rowReferences[p][sortColumn]; 
rowReferences[p][sortColumn] = rowReferences[pos][sortColumn]; 
rowReferences[pos][sortColumn] = temp; 

のこの部分は、スコープのための外でなければならない:)

最終的なコード:

void sort(int** rowReferences, int rowCount, int colCount, int sortColumn) { 
    int pos, lower, temp; 

    for (int p = 0; p < rowCount; p++) 
    { 
     pos = p; 
     lower = rowReferences[p][sortColumn]; 
     for (int j = p + 1; j < rowCount; j++) { 
      if (rowReferences[j][sortColumn] < lower) { 
       pos = j; 
       lower = rowReferences[j][sortColumn]; 
      } 
     } 
     temp = rowReferences[p][sortColumn]; 
     rowReferences[p][sortColumn] = rowReferences[pos][sortColumn]; 
     rowReferences[pos][sortColumn] = temp; 
    } 
} 
+0

うわー、私はそれを何度も完全に見て、エラーのための変数を見ていました。どうもありがとう! – Empyrean