【发布时间】:2019-09-12 05:39:10
【问题描述】:
是否存在不需要指定int (*compar)(const void *, const void*) 的“内置”sort?例如,我发现大约 99% 的时间我会进行基本的升序或降序排序,而不关心特殊的比较情况。
是否可以在这里指定等效的“内联”函数,或者是否总是需要一个独立的函数来进行这种比较?
【问题讨论】:
-
“内联”功能是什么意思?
-
您是否只想节省打字工作,因为您经常使用相同的功能?捷径的方法就是答案。或者您根本不想定义比较函数?恰好存在于标准库中并与行为和原型相匹配的函数就是答案。
-
如果您的意思是运行时函数,那么不,只有
qsort可用,但当然您可以创建一个包含此类函数的库,以便在需要时始终链接到。 -
是的,您编写了一个
int compare (const void *a, const void *b) { ... }比较函数作为最后一个参数传递给qsort。如果a排序在b,则返回负值,如果它们相等则返回零,如果b排序在之前a,则返回正值(就像strcmp函数对字符串所做的那样)。a & b指向要排序的数组中元素的指针。这里的所有都是它的。很值得结交朋友。对于整数值,您可以使用return (*(int*)a > *(int*)b) - (*(int*)a < *(int*)b); (which prevents potential overflow compared toa - b`)