用C求数组的中值

用C求数组的中值,c,arrays,function,return,C,Arrays,Function,Return,我需要在C中编写一个函数intmedian(intd[],intsize),用于查找数组的中值。该函数需要调用一个函数void selectsort(int d[],int size),该函数为median()函数对数组进行排序。只有median()函数才允许调用selectsort()函数 如果需要使用void返回类型,如何从selectsort()到median()获取排序数组?我考虑过使用指针,但这也不起作用,因为指针也需要返回。我无法将selectsort()嵌套在median()中,可

我需要在C中编写一个函数
intmedian(intd[],intsize)
,用于查找数组的中值。该函数需要调用一个函数
void selectsort(int d[],int size)
,该函数为
median()函数对数组进行排序。只有
median()
函数才允许调用
selectsort()
函数


如果需要使用
void
返回类型,如何从
selectsort()
median()
获取排序数组?我考虑过使用指针,但这也不起作用,因为指针也需要返回。我无法将
selectsort()
嵌套在
median()
中,可能
selectsort
会对数组进行排序,从而破坏原始排序


调用
selectsort
后,只需将
d
传递给
median
,当将非常量指针传递给函数时,该函数可以修改指针指向的内容。因此,在您的情况下,解决方案是向两个函数传递相同的指针:

int data[] = {1,11,2,12,3,13,4,14};
// Sort the data array
selectsort(data, 8);
// Find the median of the same data array
int m = median(data, size);
仅允许中值()调用selectsort()

如果是这种情况,并且假设您希望保留原始顺序,您可以像下面这样复制阵列:

int median(int d[], int size) {
    int *data = malloc(sizeof(int)*size);
    memcpy(data, d, sizeof(int)*size));
    selectsort(data, 8);
    // Use data to find median
    int med = ...
    free(data);
    return med;
}

其思想是通过对其副本进行排序来保留原始数组的内容。

是一种“就地”排序算法。这意味着,如果您将数组传递给selectsort(),它将使用该数组作为工作内存,并在函数返回时对其进行排序。

为什么指针不能对
中值
函数将在其上工作的原始数组进行排序?不确定为什么会被否决。这是一个非常合理的问题(如果相当初级的话)。很抱歉,我没有在我原来的帖子(现在已经澄清)中详细说明:只有
median()
可以调用
selectsort()
。我无法调用
selectsort()
本身,因此如果没有返回类型,我将无法将
d
传递回
median()
。然而,我对C语言中的内存进程不太熟悉,所以这可能根本不是你要说的。在C语言中,你将指向原始数组
d
的指针传递给函数
media()
selectsort()
。数组
d
将被修改,您可以遍历它以找到中间值。
selectsort()
中不需要返回值,我对C还是相当陌生的,所以如果可以的话,可以问几个后续问题<代码>数据
是指向数组数据的内存位置的指针,对吗?如果这是真的,那么我可以将一个指向数组的指针作为参数传递给
d[]
,在
selectsort()
中将其作为普通数组进行排序,然后在
media()
中调用指针,该指针将引用现在排序的数组?@StevenH是的,没错。同时,从
media()
的调用方传递的
d
数组将保持不变,因为您从未对其进行过写入。这非常有意义,而且正是我需要了解发生了什么的原因。非常感谢。还有一个问题:为什么将8传递给
selectsort()
?难道不应该传递
size
吗?@StevenH绝对!这就是我复制/粘贴时发生的情况:-(