非拷贝数组排序问题:多排序算法测试时的数组复用困扰
不依赖STL的数组复制解决方案
1. 手动实现数组复制函数
既然不能用STL的std::copy,自己写一个循环复制的函数即可,完全不依赖STL:
void copyArray(int* dest, const int* src, int size) { for (int i = 0; i < size; ++i) { dest[i] = src[i]; } }
测试时,基于同一份原始数组复制出独立的副本给每个排序算法使用,避免前序排序修改数组影响后续测试:
// 生成原始测试数组 int* originalArr = fill(size); // 测试归并排序 int* mergeArr = new int[size]; copyArray(mergeArr, originalArr, size); mergeSort(mergeArr, size); // 测试快速排序 int* quickArr = new int[size]; copyArray(quickArr, originalArr, size); quickSort(quickArr, size); // 测试堆排序 int* heapArr = new int[size]; copyArray(heapArr, originalArr, size); heapSort(heapArr, size); // 释放所有动态分配的内存 delete[] originalArr; delete[] mergeArr; delete[] quickArr; delete[] heapArr;
2. 结合函数指针优化测试流程
针对你后续计划用函数指针优化的需求,可以封装通用测试逻辑,减少重复代码:
// 定义排序函数指针类型 typedef void (*SortFunc)(int*, int); // 通用测试函数:自动复制数组并执行排序 void testSort(SortFunc sortFunc, const int* original, int size) { int* arr = new int[size]; copyArray(arr, original, size); // 这里可以插入时间测量、结果验证的代码 sortFunc(arr, size); delete[] arr; }
调用时只需传入对应排序函数即可:
int* originalArr = fill(size); testSort(mergeSort, originalArr, size); testSort(quickSort, originalArr, size); testSort(heapSort, originalArr, size); delete[] originalArr;
注意:如果你的
fill函数生成的是随机数组,不要直接多次调用fill生成新数组——每次生成的随机数组元素不同,会导致三个排序算法的测试基准不一致,影响结果对比的公平性。
内容的提问来源于stack exchange,提问作者i_hate_F_sharp
相关产品推荐
相关产品推荐

