微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

qsort 不会对整数数组进行排序

如何解决qsort 不会对整数数组进行排序

这是我的代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int comp (const void *a,const void *b)
{
    int *s1 = (int *)a;
    int *s2 = (int *)b;

    return (s1 - s2);
}

int main() {
    int a[] = { 1,2,5,3 };
    qsort(a,4,sizeof(a),comp);
    for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++) {
        printf("%d ",a[i]);
    }
}

我使用 qsort() 对数组进行升序排序,但不幸的是,没有任何反应。数组元素保持在相同的位置。我尝试在调用 comp() 函数时打印消息,并且它被正确调用。问题是,元素没有改变。

可能是什么问题?

解决方法

您减去的是指针,而不是整数。推导指针以获取实际值。

这可能意味着按照您所说的执行 return (*s1 - *s2)。然而,正如尤金·什。提到,这可能会溢出 int。因此,比较*s1*s2 并相应地返回1-10。 Weather Vane 还提到您传递了错误的尺寸值。您应该分别将元素数量和每个元素的大小传递给第二个和第三个参数。 所以qsort(a,sizeof(a)/sizeof(a[0]),sizeof(a[0]),comp);

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int comp (const void * a,const void * b)
{
    int *s1 = (int *)a;
    int *s2 = (int *)b;

    if(*s1 > *s2) {
        return 1;
    }
    else if(*s1 == *s2) {
        return 0;
    }
    else {
        return -1;
    }
}

int main() {
    int a[] = {1,2,5,3};
    qsort(a,comp);
    for (int i = 0; i<sizeof(a)/sizeof(a[0]); i++) {
        printf("%d ",a[i]);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。