基于列比较的排序矩阵

时间:2013-10-27 05:53:34

标签: c# c algorithm sorting

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

谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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;
    }
  }
}