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++ 或其他语言的答案,请与我们分享。

谢谢你。

4

2 回答 2

2

我相信您正在尝试按第二列的降序对矩阵进行排序。试试这个代码。

int[][] mat = new[] { new[] { 4, 4 }, new[] { 5, 1 }, new[] { 3, 2 }, new[] { 6, 1 } };
var ordered = mat.OrderByDescending(i => i[1]);
于 2013-10-27T06:20:09.007 回答
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;
    }
  }
}
于 2013-10-27T05:59:51.997 回答