用C求出数组的中值

时间:2013-09-12 17:06:34

标签: c arrays function return

我需要在C中编写一个函数int median(int d[], int size)来查找数组的中位数。该函数需要调用函数void selectsort(int d[], int size),该函数对median()函数的数组进行排序。只允许median()函数调用selectsort()函数。

如果我需要使用selectsort()返回类型,如何从median()void获取排序后的数组?我虽然关于使用指针,但这也不起作用,因为指针也需要返回。我无法在selectsort()内嵌套median()

3 个答案:

答案 0 :(得分:3)

大概selectsort对数组进行排序,破坏原始排序。

致电d后,只需将median传递给selectsort

答案 1 :(得分:2)

当您将非const指针传递给函数时,您可以让该函数修改指针所指向的内容。因此,在您的情况下,解决方案是将相同的指针传递给两个函数:

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);
  

只允许中位数()调用electort()

如果是这种情况,并且假设您希望保留原始排序,您可以像这样制作数组的副本:

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;
}

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

答案 2 :(得分:1)

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