簡體   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