2013-10-27 60 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]);