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之前和之后打印每个边缘,订单已被更改,但它不是正确的顺序。有人可以帮忙吗?我的代码中有什么问题?
答案 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
的明确名称。