gpt4 book ai didi

c - 如何在C中对结构体指针数组进行快速排序?

转载 作者:行者123 更新时间:2023-11-30 18:24:59 26 4
gpt4 key购买 nike

因此,有很多将 qsort() 与结构、指针等一起使用的示例。但在我的实现中,它们似乎都没有正确排序。

这是我的代码的概述:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct node {
int value;
};
typedef struct node Node;

int compare(const void *p1, const void *p2);

int main()
{
Node *myArray[10];
Node *node1, *node2, *node3;
int i;

node1 = (Node *)malloc(sizeof(Node));
node1->value = 10;
myArray[0] = node1;

node2 = (Node *)malloc(sizeof(Node));
node2->value = 7;
myArray[1] = node2;

node3 = (Node *)malloc(sizeof(Node));
node3->value = 12;
myArray[2] = node3;

for (i=0; i<3; i++) {
printf("Element %i: %i\n", i, myArray[i]->value);
}

printf("-------------\n");

qsort(myArray, 3, sizeof(Node*), compare);

for (i=0; i<3; i++) {
printf("Element %i: %i\n", i, myArray[i]->value);
}

return 0;
}

int compare(const void *p1, const void *p2)
{
Node *node1 = (Node*) p1;
Node *node2 = (Node*) p2;

return node1->value - node2->value;
}

这段代码是为了演示我的问题,所以请不要对我的语义咆哮!数组中多余的未使用空间是故意的。 :p

据我所知,根据我在网上阅读的内容,这应该可行。但事实并非如此。由于某种原因,它开始对比较函数中的垃圾值进行排序。

我要求数组通常大于其中的值,因此希望 qsort() 函数的第二个参数在本例中将其限制为仅前 3 个元素。但似乎忽略了这一点。

知道是什么导致了这种奇怪的行为吗?

最佳答案

当您将 *myArray 作为第一个参数传递给 qsort 函数时,就像传递 myArray[0] 一样,这绝对不是正确的指针(并且会导致未定义的行为,并且很可能会导致一些奇怪的行为,例如对“垃圾”数据进行排序)。

要么使用普通的 myArray 让数组衰减为指向第一个元素的指针,要么使用 &myArray[0] 显式指定第一个元素。

关于c - 如何在C中对结构体指针数组进行快速排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34164792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com