我目前在圖上實現了一些算法,我使用一個結構來保存關於圖中每條邊的信息:它的源頂點,它的目標頂點和它的權重。Qsort()在結構上不起作用
我有結構中聲明如下:
然後我創建變量指針和n
結構,其中n
處於圖中的邊數分配內存:
edge_p localEdges = (edge_p)malloc(n*sizeof(edge_t));
然後我填寫結構localEdges
與另一個相同類型的結構allEdges
的值:
for (int i = 0; i < num_edges; i++) {
localEdges[i].data[0] = allEdges[i].data[0];
localEdges[i].data[1] = allEdges[i].data[1];
localEdges[i].data[2] = allEdges[i].data[2];
}
然後我需要按localEdges
的內容按數據[2]字段的升序排序(按邊緣權重上升)。我比較功能是這樣的:
int myComp (const void *a, const void *b)
{
const edge_t * ptr_a = (const edge_t *)a;
const edge_t * ptr_b = (const edge_t *)b;
return ptr_b->data[2] < ptr_a->data[2];
}
和呼叫的功能如下:
qsort(localEdges, n, sizeof(edge_t), myComp);
然而,這是行不通的。已處理的localEdges
陣列有一些數據放置錯誤。例如:
localEdges[0].data[2] = 1
localEdges[1].data[2] = 2
localEdges[2].data[2] = 1
localEdges[3].data[2] = 2
localEdges[4].data[2] = 3
localEdges[5].data[2] = 3
localEdges[6].data[2] = 4
當它應該是:
localEdges[0].data[2] = 1
localEdges[1].data[2] = 1
localEdges[2].data[2] = 2
localEdges[3].data[2] = 2
localEdges[4].data[2] = 3
localEdges[5].data[2] = 3
localEdges[6].data[2] = 4
我想有一些與指針,但我不與他們相當有信心。
有什麼建議嗎?我會欣賞你的幫助。
'常量edges_t * ptr_a' < - 其中'edges_t'聲明?我只看到'edge_t'。順便說一句,最好不要爲你自己的類型使用'_t'後綴,它被POSIX保留用於未來的擴展。 –
用'return ptr_a-> data [2] - ptr_b-> data [2];'替換'return ptr_b-> data [2] < ptr_a-> data [2];'。 –
我假設'n == num_edges'? –