在 C 中编写通用 mergeSort,无法将值分配给 void*

Writing generic mergeSort in C, can't assign value to void*

我正在尝试在 C:

中编写 "generic" mergeSort
void mergeSort(void *arr, int begin, int end,int size,
    int (*comp)(void *, void *));

但是由于您需要一个 holder/temp 数组,所以它变得有点棘手。 我不确定如何为该数组赋值,因为我将它创建为 void * array:

int mid = (begin + end) / 2;
int len = end - begin + 1;
void *pom = malloc(len*size);

但是我不能给那个数组赋值,有什么办法吗?

i = begin, j = mid + 1, k = 0;
while (i <= mid && j <= end)
    **pom[k++]** = ((*comp)((char*)arr + i*size, (char *)arr + j*size) <= 0) ? arr[i] : arr[j];
while (i <= mid)
    **pom[k++]** = arr[i++];
while (j <= end)
    **pom[k++]** = arr[j++];

粗线表示错误。

是的,您需要复制 size 个字节。

所以 **pom[k++]** = arr[i++]; 变成了 memcpy(pom + size*(k++), arr+size*(i++), size); 并且对于所有其他的都类似。