对于较大的阵列,排序功能失败

时间:2013-12-15 22:52:22

标签: c sorting

我正在编写一个程序来实现 Prim的算法,用于课程的短项目的最小生成树。第一步是根据重量对边缘进行分类;我有时为此工作的代码,但并非总是如此。

以下是代码:

for(int i = 0; i < graph.edges; ++i) 
{
    least_remain_edge = i;

    for(int k=i+1; k<graph.edges; ++k)
    {
        if(graph.edge[k][3]<graph.edge[least_remain_edge][3])
        {
            least_remain_edge = k;
        }
    }

    if(least_remain_edge != i)
    {
        swap_temp = graph.edge[i][0];
        graph.edge[i][0] = graph.edge[least_remain_edge][0];
        graph.edge[least_remain_edge][0] = swap_temp;
    }
}

graph.edge[i][3]weight边缘的i[i][0]是边参考/名称。它类似于冒泡排序,它在列表的其余部分中找到最小的排序,并将其放在i位置。我不明白为什么这不能一直有效!

1 个答案:

答案 0 :(得分:2)

当你移动元素时,你只是移动他们的名字/参考,而不是权重和你存储的任何其他东西。所以,也许做一些像

这样的事情
for (int k = 0; k < 4; k++) {
    swap_temp = graph.edge[i][k];
    graph.edge[i][k] = graph.edge[least_remain_edge][k];
    graph.edge[least_remain_edge][k] = swap_temp;
}