2013-10-27 153 views
0

我有一個50行和2列的矩陣,我想根據對第二列的值的值進行比較來對它們進行排序。這裏是我的意思是,如果我的矩陣:基於列比較的排序矩陣

[00][01] 
[10][11] 
[20][21] 
[30][31] 
[40][41] 
[50][51] 

我想比較[01]和[11]與[01]較少比[11]我想從第一行更換整個第二行,是這樣的(例如):

[10][11] 
[00][01] 
[20][21] 
[30][31] 
[40][41] 
[50][51] 

我嘗試使用C#和用這種算法來了,但它沒有工作:

int temp1, temp2; 
        for (int i = 0; i < 50; i++) 
        { 
         for (int j = i + 1; j < 2; j++) 
         { 
          if (rating[i, j] < rating[i + 1, j]) 
          { 
           temp1 = rating[i + 1, j - 1]; 
           temp2 = rating[i + 1, j]; 

           rating[i + 1, j - 1] = rating[i, j - 1]; 
           rating[i + 1, j] = rating[i, j]; 

           rating[i, j - 1] = temp1; 
           rating[i, j] = temp2; 
          } 
         } 
        } 

有人能告訴我一個關鍵的鍛鍊這問題,或者如果你有在C,C++或其他LAN的答案guage請與我們分享。

謝謝。

回答

0

您的排序算法的實現是錯誤的。內環不應該運行從i + 1到1

嘗試實現簡單的冒泡排序:

for (int i = 0; i < 50; i++) 
{ 
    for (int j = 0; j < 49-i; j++) 
    { 
    if (rating[j, 1] < rating[j + 1, 1]) // column 1 entry comparison 
    { 
     temp1 = rating[j, 0];    // swap both column 0 and column 1 
     temp2 = rating[j, 1]; 

     rating[j, 0] = rating[j+1, 0]; 
     rating[j, 1] = rating[j+1, 1]; 

     rating[j+1, 0] = temp1; 
     rating[j+1, 1] = temp2; 
    } 
    } 
} 
+0

部分它確實工作。看到圖片: http://im41.gulfup.com/TrGUn.bmp 在那裏我指着紅色的第二列有5號應該是最高值。應該是這樣的: 。5 。5 。5 。5 。4 .. 4 。4 ..........等等。 –

+0

我編輯了代碼中的一個小錯誤。 –

+0

完整的代碼是如此冗長和複雜,只有這個需求才能完成實現。 –

1

我相信你正試圖以降序第二列的順序排序矩陣。試試這個代碼。

int[][] mat = new[] { new[] { 4, 4 }, new[] { 5, 1 }, new[] { 3, 2 }, new[] { 6, 1 } }; 
var ordered = mat.OrderByDescending(i => i[1]);