我正在尝试编写一个简单的程序来查找数组的中位数。为此,我首先尝试使用 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/