【问题标题】:Using sort/qsort in C [duplicate]在 C 中使用 sort/qsort [重复]
【发布时间】: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 to a - b`)

标签: c qsort


【解决方案1】:

我相信 qsort() 是 C 中唯一的“内置”排序函数。但如果你编写 C++,std::sort() 也是可用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 2011-02-03
    相关资源
    最近更新 更多