比较如何在qsort()函数中起作用的

时间:2019-02-22 22:45:35

标签: c++

我已按照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

提出了类似的问题

1 个答案:

答案 0 :(得分:2)

这没有魔力。原型是:

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);
}