2

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

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

4

3 回答 3

3

大概selectsort是对数组进行排序,破坏了原来的顺序。

调用后简单地传递d给。medianselectsort

于 2013-09-12T17:08:37.063 回答
2

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

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

只允许 median() 调用 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;
}

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

于 2013-09-12T17:09:04.787 回答
1

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

于 2013-09-12T17:14:07.510 回答