gpt4 book ai didi

c++ - 比较如何在 qsort() 函数中工作

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

我阅读了 qsort()<stdlib.h> 的用法,如 qsort() 所述。该函数的语法是:

void qsort (void* base, size_t num, size_t size,
int (*compar)(const void*,const void*));

这个函数需要一个排序函数compare()如下:

int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}

使用此函数,qsort() 将数组元素按升序排序。我对 compare() function 感到困惑,它如何帮助实现升序排序。谁能用简单的语言解释一下其中涉及的原理?谢谢!

附言值得注意的是,这里也有人问过类似的问题 cmpfunc in qsort() function in c

最佳答案

它没有魔法。原型(prototype)是:

int compare (const void *a, const void *b)

指针ab指向 被排序数组中相邻元素的指针。 compare 函数的作用是告诉 qsort 如何评估 a 指向的值是否排在 b 指向的值之前(在这种情况下,比较函数应返回 -1)。如果值相等,那么它应该返回 0 最后如果 b 应该排在 a 之前,比较应该返回 1.

(技术上可以返回任何负值或正值)

但是,您的compare 可能会溢出。最好将整数值作为两个条件表达式的结果进行测试,例如

/* integer comparison ascending
* (adapt for all numeric types)
*/
int compare (const void *a, const void *b)
{
/* (a > b) - (a < b) */
return (*(int *)a > *(int *)b) - (*(int *)a < *(int *)b);
}

关于c++ - 比较如何在 qsort() 函数中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54836240/

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