我在网上找到了这个示例代码,它解释了
qsort
函数的工作原理。但我无法理解比较函数返回什么。#include "stdlib.h"
int values[] = { 88, 56, 100, 2, 25 };
int cmpfunc (const void * a, const void * b) //what is it returning?
{
return ( *(int*)a - *(int*)b ); //What is a and b?
}
int main(int argc, _TCHAR* argv[])
{
int n;
printf("Before sorting the list is: \n");
for( n = 0 ; n < 5; n++ ) {
printf("%d ", values[n]);
}
qsort(values, 5, sizeof(int), cmpfunc);
printf("\nAfter sorting the list is: \n");
for( n = 0 ; n < 5; n++ ) {
printf("%d ", values[n]);
}
return 0;
}
values
中读取的整数。该函数返回a
-b
的值,如果a
较小,则为< 0
(负数),如果它们相等,则为0
,或者如果a
较大,则为> 0
(正数)。 - Ken Whitestrcmp()
(或传递给qsort()
的比较函数)允许对这些情况返回任何负数或正数值。 - Michael Burrint
中表示,因此行为未定义。更糟糕的是,生成的代码通常会将其包装成一个正数1294967296,这完全破坏了排序。查看AnT的答案以获取正确的函数,以及此问答集中关于如果使用此比较函数会发生什么的内容。 - Antti Haapala -- Слава Україні