我大部分时间都是C++程序员,但为了好玩,我尝试在C语言中进行一些通用编程。特别是,我实现了一个通用排序算法。我的函数签名是:
int sort(void *data,
size_t num_elems,
size_t elem_size,
int (*cmp)(const void*, const void*))
与标准库中的
qsort()
相比,我注意到我的函数与其不同,qsort()
没有返回值。由于对数组进行排序总是需要交换元素,因此实现需要一个大小为 elem_size
的临时存储器。由于 C 语言没有模板,所以在编译时不知道 elem_size
的大小,因此必须动态分配临时存储器,这可能失败。在这种情况下,qsort()
不能对数组进行排序,并且也无法报告错误,因此无法确定在返回后数组是否已排序。
我有遗漏什么吗?