gpt4 book ai didi

c - C 库中的快速排序

转载 作者:行者123 更新时间:2023-11-30 19:37:34 27 4
gpt4 key购买 nike

qsort的第二个参数

现在我想按 x 对一组点进行排序。以下是我的代码:

typedef struct {
int x;
int y;
} point;

int cmpfunc( const void * a, const void * b){
point *point1 = (point *)(a);
point *point2 = (point *)(b);

if(point1->x < point2->x){
return -1;
}
return 0;
}

int main(){

point *points = (point *)malloc(sizeof(point)*3);
points[0].x = 1;
points[0].y = 2;

points[1].x = 0;
points[1].y = 4;

points[2].x = 4;
points[2].y = 3;

qsort(points,2,(sizeof(points[0])),cmpfunc);

int i=0;
while (i<3){
printf("x=%d",points[i].x);
printf("y=%d\n",points[i].y);
i++;
}
return 0;
}

请注意qsort(points,2,(sizeof(points[0])),cmpfunc);

当我传递第二个参数值 2 而不是 3 时,结果是正确的。我的代码有什么问题吗?

最佳答案

要在 x 轴上排序,您需要类似以下内容:

static void cmpfunc(const void *a, const void *b)
{
const point *pa = a, *pb = b;
return pa->x < pb->x ? -1 : pa->x > pb->x;
}

它返回的值必须小于、等于或大于零。 See the manual page了解更多。

哦,你真的不应该无缘无故地“删除 const”,当然你永远不需要从 void * 转换为指向 struct 就像我们这里一样。保持简单,学习这些东西,这样你就不会觉得有必要“为了更好的措施而投入 Actor ”。

关于c - C 库中的快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39655521/

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