【发布时间】:2015-03-01 20:17:56
【问题描述】:
我正在尝试对二维数组执行冒泡排序,按第三个索引(整数)排序
string[,] edges = new string[,] { {"A", "B", "2"},
{"A", "C", "3"},
{"A", "E", "10"},
{"B", "C", "5"},
{"B", "D", "10"},
{"C", "D", "2"},
{"D", "E", "5"},
{"E", "B", "3"}
};
我在排序代码的 IF 语句上得到一个 IndexOutOfRangeException
string[] temp = {};
//sort edges and add them to sortedEdges - using bubblesort
for (int i = 0; i < edges.Length - 1; i++){
for (int j = 0; j < edges.Length - 1; j++){
if (Int32.Parse(edges[i, 2]) > Int32.Parse(edges[i + 1, 2])){
//make a swap
//put array record i into temp holder
temp[0] = edges[i, 0];
temp[1] = edges[i, 1];
temp[2] = edges[i, 2];
//copy i + 1 into i
edges[i, 0] = edges[i + 1, 0];
edges[i, 1] = edges[i + 1, 1];
edges[i, 2] = edges[i + 1, 2];
//copy temp into i + 1
edges[i + 1, 0] = temp[0];
edges[i + 1, 1] = temp[1];
edges[i + 1, 2] = temp[2];
}
}
}
我的问题是,我该如何解决这个问题,以使数组“edges”充满行,按第三列排序?
谢谢。
【问题讨论】:
-
旁注:
"3"是一个字符串而不是“整数”。您确实应该使用适当的结构来存储数据,而不是在本质上无类型的数组中存储行。 -
感谢您的反馈,我使用整数这个词只是为了指出我想对哪个字段进行排序。在 IF 语句中,我确实将其转换为整数。我意识到这可以做得更好,但我的主要目标是让事情以一种清晰的方式工作。
-
提供输入数据、输出数据、预期输出数据、任何错误消息、编译器、您正在运行的系统等。即 所有影响您的程序正在做什么并告诉我们什么你想要它做。根据帮助链接。 PS:您必须使用@ 来联系不是提问者、回答者或迄今为止对您的帖子发表评论的人。 (搜索 stackexchange 通知。)
-
@user4416058 您应该将示例简化为整数的二维数组 (n x 1) - 所有逻辑都是相同的,但读者不会因为查看像
Int32.Parse(edges[i + 1, 2])这样的代码而感到痛苦。这样的重写也会使样本缩短近 3 倍。滥用数组来表示类通常是不受欢迎的,并且可能会招致反对意见。
标签: c# arrays sorting bubble-sort