【问题标题】:sorting matrix based on columns comparison基于列比较的排序矩阵
【发布时间】:2013-11-06 01:30:48
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: c# c algorithm sorting


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您对排序算法的实现是错误的。内循环不应从 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;
          }
        }
      }
      

      【讨论】:

      • 部分它确实有效。见图片:im41.gulfup.com/TrGUn.bmp 我用红色指出的第二列有数字 5,它应该是最高值。应该是这样的:.. 5 .. 5 .. 5 .. 5 .. 4 .. 4 .. 4 .......... 等等。
      • 完整的代码是如此冗长和复杂,只剩下这个要求来完成实现。
      • 现在它就像一个魅力:D。你能告诉我们是什么问题吗?
      • 这是一个简单的冒泡排序实现。内部循环应该从 0 开始,之前它是从 i 开始的。
      • 非常感谢您的帮助。 ++
      猜你喜欢
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多