如何对结构数组进行排序,这些结构具有指向同一数组的指针

How to sort an array of structures, with these structures having pointers to the same array

我有一个结构数组(顶点),每个结构都有一个名称、一种颜色、一定数量的邻居和一个指针数组(邻居),所有指针都引用主结构数组中的一个顶点。我想根据名称、颜色等进行一些重新排序,问题是,每当我对主结构数组进行重新排序时,每个邻居数组都会丢失邻居的真实地址(因为职位)。

必须使用qsort(),而且我无法更改数据结构。

这是整个数据结构:

struct VerticeSt {
    int vertice;
    int color;
    int cantVecinos;
    struct VerticeSt* (*vecinos)[];
};

如果我没理解错的话,问题是:

How do I keep 2 data structures synchronized, if I sort one of them?

当前状态为:

sort()
{
    ...
    swap(a,b);
    ...
}

这当然不会触及第二个数据结构,因此导致同步丢失。

我会使用以下算法使它们保持同步:

sort()
{
    ...
    swap(*pa, *pb);
    swap( pa,  pb);
    ...
}

两者的区别在于多了一行代码来处理第二个数据结构

移动从其他节点引用的结构之前请三思。当您对顶点数组进行排序时,所有指向它们的面和边都必须实现以指向您移动它的新位置。否则您将丢失所有数据结构。出于这个原因,使用指针数组并对数组进行排序比使用整个结构要有趣得多。您可以有三个或四个指针阵列来显示不同的顺序,而不会破坏您的网格。并且复制指针比复制整个结构更便宜。