用C求数组的中值
我需要在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()中,可
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绝对!这就是我复制/粘贴时发生的情况:-(