我需要在C中编写一个函数int median(int d[], int size)
来查找数组的中位数。该函数需要调用函数void selectsort(int d[], int size)
,该函数对median()
函数的数组进行排序。只允许median()
函数调用selectsort()
函数。
如果我需要使用selectsort()
返回类型,如何从median()
到void
获取排序后的数组?我虽然关于使用指针,但这也不起作用,因为指针也需要返回。我无法在selectsort()
内嵌套median()
。
答案 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(),它将使用该数组作为工作内存,并在函数返回时对其进行排序。