繁体   English   中英

qsort()图形结构数组

[英]qsort() an array of graph structures

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

struct Graph
{
    int V, E;
    Edge* edge;
}; typedef struct Graph Graph;

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

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

Mycomp函数:

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

毕竟,我尝试打印qsort前后的所有边缘,但顺序已更改,但这不是正确的顺序。 任何人都可以帮忙吗? 我的代码哪一部分错了?

return a1->weight > b1->weight;

应该

return a1->weight - b1->weight;

从手册中:

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

@nm没什么可添加的答案

但是,如果您编写,则可以稍微简化声明

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

甚至

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

如果您打算仅使用类型定义的名称Edge并且不需要基本类型struct Edge的显式名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM