You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非拷贝数组排序问题:多排序算法测试时的数组复用困扰

不依赖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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:00:08