qsort()一个图形结构数组

时间:2016-05-16 06:15:38

标签: c qsort

Graph* graph = (Graph*)malloc(sizeof(Graph));
qsort(graph->edge, graph->E, sizeof(graph->edge[0]), myComp);

我有一个像这样的图形结构。我正在尝试使用qsort按重量递增的顺序对所有边缘进行排序。 在主要:

    int myComp(const void* a, const void* b)
{
    Edge* a1 = (Edge*)a;
    Edge* b1 = (Edge*)b;
    return a1->weight > b1->weight;
}

Mycomp功能:

NOT IN

毕竟,我试图在qsort之前和之后打印每个边缘,订单已被更改,但它不是正确的顺序。有人可以帮忙吗?我的代码中有什么问题?

2 个答案:

答案 0 :(得分:2)

return a1->weight > b1->weight;

应该是

return a1->weight - b1->weight;

从手册:

  

如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数。

答案 1 :(得分:0)

@ n.m无法添加答案。

但是,如果你写

,你可以稍微压缩你的声明
typedef struct Edge
{
    int src, dest, weight;
} Edge;

甚至

typedef struct
{
    int src, dest, weight;
} Edge;

如果您打算仅使用type-def' d名称Edge,则不需要基本类型struct Edge的明确名称。