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