c - 如何正确使用qsort()?

标签 c arrays qsort

我正在尝试编写一个简单的程序来查找数组的中位数。为此,我首先尝试使用 qsort 来整理我的值,但我无法让它正常工作。我相信这与我的函数参数和指针有关。

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


int cmpfunc (const void * a, const void * b)
{
    return ( *(int*)a - *(int*)b );
}

int median(const int* array)
{
    double median;
    int length =0;
    while(array[length])
        length++;

    qsort(*array, length, sizeof(int), cmpfunc);

    if(length %2 ==0)
    {
        median=(array[length/2] + array[(length/2)+1])/2;
    }
    else
    {
        median = array[(length +1/2)];
    }
    return median;
}

int main ()
{
    int array [] = {5, 3, 2, 7, 9};
    printf( "%f", median(array));
}

最佳答案

除此之外,您在 length 的代码段中得到了错误的值

 while(array[length])  // Array is not ended with zero
    length++;          // Length would get some unexpected value

您需要从函数median 返回double 并且length 还需要一个参数。

double median(int* array, const int length){...}  
//            ^Removed const qualifier and added an extra parameter for array size  

中位数称为

double result = median(array, sizeof(array)/sizeof(array[0]))

关于c - 如何正确使用qsort()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25768588/

相关文章:

C 矩阵字符未正确显示打印

两个线程能否同时读取同一个const内存块

javascript - 如何使用 jQuery 访问存储在数组中的元素?

c - 从 int** 读取 const 值,该值是从 int[][] 初始化的

python - ValueError 和 odepack.error 使用 integrate.odeint()

c - 使用 qsort 时出现段错误

c - 我应该收到此错误 : variable-sized object may not be initialized?

C、free() 和指针运算

c++ - qsort() 中 char* 和 char[] 的混淆

c - C 意外行为中的 qsort 函数?