Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 二维数组气泡排序_C#_Arrays_Sorting_Bubble Sort - Fatal编程技术网

C# 二维数组气泡排序

C# 二维数组气泡排序,c#,arrays,sorting,bubble-sort,C#,Arrays,Sorting,Bubble Sort,我尝试在2D数组上执行气泡排序,按第三个索引整数排序 string[,] edges = new string[,] { {"A", "B", "2"}, {"A", "C", "3"}, {"A", "E", "10"}, {"B", "C",

我尝试在2D数组上执行气泡排序,按第三个索引整数排序

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 statement上得到一个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];

                }
            }
        }
我的问题是,如何解决这个问题,使数组边由第三列排序的行填充

谢谢。

更新了v-3

问题在于这样定义的表的长度,在您的例子中是24,因为它似乎计算了两个维度中的所有元素。 请尝试以下代码:

string[] temp = new string[3];

for (int i = 0; i < edges.GetLength(0) - 1; i++){
    int j;
    j = 0;
    for (; j < edges.GetLength(0) - 1; j++){

        if (Int32.Parse(edges[j, 2]) > Int32.Parse(edges[j + 1, 2])){
            //make a swap
            //put array record j into temp holder
            temp[0] = edges[j, 0];
            temp[1] = edges[j, 1];
            temp[2] = edges[j, 2];

            //copy j + 1 into j
            edges[j, 0] = edges[j + 1, 0];
            edges[j, 1] = edges[j + 1, 1];
            edges[j, 2] = edges[j + 1, 2];

            //copy temp into j + 1
            edges[j + 1, 0] = temp[0];
            edges[j + 1, 1] = temp[1];
            edges[j + 1, 2] = temp[2];

        }
    }
}

您可以在此处找到更新的工作示例:

旁注:3是字符串而不是整数。您真的应该使用适当的结构来存储数据,而不是在一个基本上没有类型的数组中存储行。感谢您的反馈,我使用integer这个词只是为了指出我要排序的字段。在IF语句中,我将它转换为整数。我意识到这可以做得更好,但我的主要目标是让它以一种清晰的方式工作。给出输入数据、输出数据、预期的输出数据、任何错误消息、编译器、您正在运行的系统等,即影响您的程序正在做什么以及告诉我们您希望它做什么的一切。请点击帮助链接。PS:你必须使用@来联系一些人,这些人不是提问者、回答者,也不是目前为止你帖子上唯一的评论者。搜索stackexchange通知。@user4416058您应该将示例简化为二维数组n x 1整数-所有逻辑都是相同的,但读者在查看类似Int32.ParseEdge[i+1,2]的代码时不会感到痛苦。这样的重写也会使样本缩短近3倍。滥用数组来表示类通常是不受欢迎的,并且可能会招致否决票。谢谢,但我仍然会遇到同样的错误。这或多或少是整个代码的作用。我也不明白为什么我会出错。我会继续努力的。谢谢,对你有用吗?我也犯了同样的错误。我把范围缩小了一点,出界在比较的第二部分。Int32.Parseedges[i+1,2]谢谢!这似乎可以防止错误,现在我可以做一些真正的工作了。再次感谢。@user4416058请注意,通过每个维度获取长度的正确方法是Array.GetLengthdimension-请参阅