我正在尝试使用C提供的内置快速排序来排序指向结构的指针数组。我想根据结构中的名称元素对每个元素进行排序。将指针数组快速排列到结构中
尽管我每次通过比较函数调试整个数组的输出时,都表明该函数的确在切换元素,但最终的结果并不是正确的排序顺序。有什么我只是没有看到这里?
typedef struct // The custom data type.
{
char *name;
} Person;
----------------------------
Person **people; // A dynamically allocated array of Person pointers.
int numPeople; // The logical index of people.
int maxPeople; // The current maximum capacity of people.
int compare(const void *a, const void *b) // The comparison function for determining
{ // alphabetic ordering.
const Person *const *p1 = a;
const Person *const *p2 = b;
return strcmp((*p1)->name, (*p2)->name); // Compare alphabetically, return result.
}
void SomeFunction(void)
{
qsort(people, numPeople, sizeof(Person *), compare); // Perform the sort.
}
感谢您的帮助。
只是为了确认qsort正在找到正确的数据:您可以在'compare'中添加一个'printf'行来打印每个人的姓名。如果结果不符合预期,则可能'* a'和'* b'毕竟不是指向Person对象的指针。 – Edmund
我只是这样做了,事实上它打印出了与结构相对应的名字,所以我猜这个部分是正确的。感谢您的建议。 –
经过测试,在这里可以正常工作。 –