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

如何正确比较多种排序算法的执行时间?附测试问题与需求

背景

问题源自Stack Overflow相关提问,我曾尝试对比多种排序算法的执行时间,但操作中出现了诸多问题 :)

任务目标

当前我的目标是对比多种排序算法的执行时间,并针对不同大小的数组收集统计数据。假设我有4种不同的算法,需要在3个不同大小的随机生成int数组上测试它们的执行时间。

此前问题中被指出的若干问题:

  1. 分支预测失效(missed branch prediction):分支预测对代码性能影响极大
  2. 过多源码文件阻碍部分优化
  3. 在禁用优化的情况下讨论性能毫无意义
  4. 在同一进程中运行多个基准测试存疑
  5. 冷/热缓存(cold/hot cache)问题
  6. 操作系统实际执行动态内存分配的时机与方式

我查阅资料后针对这些问题整理了一些解决方案:

  1. 分支预测由处理器控制,我无法直接干预(虽可将if/else转换为特殊写法避免,但我不会这么做)
  2. 若确有必要,可将所有代码整合到main.c中,但我更倾向于拆分文件以便维护
  3. 我使用CLion,已找到添加优化标志的方式:set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -O3)(若有误请指正)
  4. 若必须分开,可为每个算法编写独立*.c文件,但这样难以保证数组一致,或许可从文件读取数组以保证公平性
  5. 针对缓存问题,我理解只需重复运行多次测试(若理解有误请指正)
  6. 我不清楚如何处理动态内存分配问题,或许可在函数栈上定义数组以避免溢出? :)

可能还存在其他未知问题,是否有能解决大部分问题的规范方法?
是否有现成的此类测试模板?
若能在假设所有算法已实现的前提下提供示例代码,我将十分感激

以下是相关环境信息:

  • 操作系统:Windows 10
  • 编辑器:CLion
  • CMakeLists.txt配置:
    cmake_minimum_required(VERSION 3.29)
    project(Test C)
    
    set(CMAKE_C_STANDARD 23)
    set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -O3)
    
    add_executable(Test main.c
            sorting-functions/bubble_sort/bubble_sort.c
            sorting-functions/bubble_sort/bubble_sort.h
            utils/swap/swap.c
            utils/swap/swap.h
            utils/print_arr/print_arr.c
            utils/print_arr/print_arr.h
            sorting-functions/bubble_sort_2/bubble_sort_2.c
            sorting-functions/bubble_sort_2/bubble_sort_2.h
            utils/copy_arr/copy_arr.c
            utils/copy_arr/copy_arr.h
    )
    

内容的提问来源于stack exchange,提问作者EzioMercer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:52:39