在 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);
并且对于所有其他的都类似。
我正在尝试在 C:
中编写 "generic" mergeSortvoid 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);
并且对于所有其他的都类似。