【问题标题】:qsort does not make any changes to the integer arrayqsort 不对整数数组进行任何更改
【发布时间】:2016-09-04 08:53:36
【问题描述】:

我正在使用 qsort 对整数数组进行排序。但是 qsort 没有对数组进行任何更改。我的比较函数如下:

int mycomp(const void *a, const void *b){
int *a1 = (int*)a;
int *b1 = (int*)b;

if ( a1 <  b1 ) 
    return -1;
else if ( a1 == b1 ) 
    return 0;
else
    return 1;
}

数组包含:

pos[M] = {40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 5, 10, 15, 20, 15, 30, 35};

我将 qsort 称为:

qsort(pos, M, sizeof(int), mycomp);

输出是完全相同的数组。谁能帮帮我?

【问题讨论】:

  • 您将其标记为C++C++14 等,那么您为什么在C++ 程序中使用qsort? 不要在 C++ 程序中使用 qsort -- 而是使用 std::sort。就这么简单。 std::sort(std::begin(pos), std::end(pos));
  • 调试器是解决此类问题的正确工具。 询问 Stack Overflow 之前,您应该逐行浏览您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。

标签: c++ c++14 qsort


【解决方案1】:

你比较的是指针而不是值。

修复:

int a1 = *(int*)a;
int b1 = *(int*)b;

【讨论】:

    猜你喜欢
    • 2021-06-23
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 2019-05-23
    • 1970-01-01
    • 2018-05-16
    • 2012-03-30
    相关资源
    最近更新 更多