我正在尝试以与 C 的 qsort 函数相同的方式编写自己的 Mergesort 函数。如果我正在为一组已知项目编写 MergeSort,我不会有问题,但由于我不知道它们会是什么,这让我陷入了循环。
我的教授给出的规范不希望我使用单独的函数进行合并,所以我在 Mergesort 函数本身中编写了该实现。这意味着我将拥有与 qsort() 相同的信息:
void* base
- 指向要排序的数组的第一个元素的指针size_t nel
- 数组中的元素数量size_t width
- 每个元素的大小int (*compar)( const void*, const void* )
- 告诉您如何比较每个元素的功能
我遇到的问题是合并部分。我见过的每个实现都使用一个临时数组来存储排序的项目。我不习惯使用 void 指针,我发现的最大障碍是遍历数组并将值分配给数组。如何在 指向的数组中的第二个索引处找到值base
?如何将该数组中的值分配到临时数组中?我将如何创建该临时数组?
如果我将 void 指针转换为 char,然后将它们增加宽度,它会起作用吗?不过,我不确定分配将如何工作。