c - 使用 qsort 对 long long int 数组进行排序不适用于大型 nos

标签 c qsort

我正在使用这个比较函数对由 long long int 编号组成的数组进行排序。

int compare(const void * p1,const void * p2)
{
    return (* (long long int * )a-*(long long int * )b);
}
qsort(array,no of elements,sizeof(long long int),compare)

这适用于小 nos,但是当数组包含 10^10 order 的 nos 时它会给出错误的结果?

我犯了什么错误?

最佳答案

compare 函数的结果必须是int。两个 long long 的相减很容易溢出 int 类型(在您的情况下确实如此)。

尝试明确比较两个值并返回 -1、0 或 1。

关于c - 使用 qsort 对 long long int 数组进行排序不适用于大型 nos,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17638499/

相关文章:

c - 是否可以使用 dup2 将 stdout 重定向两次?

c - 如何将英特尔 MKL 和 libdl 与黄金链接器链接起来?

c - 多个文件的结构

c - 如何根据另一个数组的数字顺序对数组进行排序?

c - qsort()不适用于数字数组

C qsort 与非全局查找表比较

C:捕获空输入并打印命令提示符

c - 如何将 long double 与 qsort 以及 NaN 进行比较?

c - 根据日期和时间元素对结构进行排序

c - 在 C 中,您可以根据另一个常量定义一个常量吗?