我已按照qsort()中的说明阅读了qsort()
中<stdlib.h>
的用法。该函数的语法为:
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
感到困惑,它如何帮助实现升序排序。任何人都可以解释简单语言所涉及的原理吗?谢谢!
P.S。 请注意,这里cmpfunc in qsort() function in c
提出了类似的问题答案 0 :(得分:2)
这没有魔力。原型是:
int compare (const void *a, const void *b)
指针a
和b
是指向要排序数组中相邻元素的指针。 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);
}