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

C++如何计算冒泡/插入/选择排序函数的毫秒级运行时间及可用内置函数

C++ 排序算法毫秒级计时实现方案

C++11及更高版本的标准库已经提供了内置的高精度计时能力,完全可以满足毫秒级运行时长的统计需求,无需依赖任何第三方库。

推荐使用的内置组件

优先使用标准库的 <chrono> 头文件提供的计时接口,这是跨平台的官方标准方案,精度和安全性都远高于传统C语言的计时接口。

具体实现步骤

  • 第一步:引入计时头文件 #include <chrono>
  • 第二步:在排序函数执行前,记录当前时间点:auto start = std::chrono::high_resolution_clock::now();
  • 第三步:执行目标排序函数(冒泡/插入/选择排序均可)
  • 第四步:排序函数执行完成后,记录结束时间点:auto end = std::chrono::high_resolution_clock::now();
  • 第五步:将时间差转换为毫秒单位:auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
  • 第六步:调用duration.count()即可获取整数类型的毫秒级运行时长。

完整可运行示例代码

#include <iostream>
#include <chrono>
#include <vector>
#include <algorithm>

// 冒泡排序实现
void bubbleSort(std::vector<int>& arr) {
    int n = arr.size();
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                std::swap(arr[j], arr[j+1]);
            }
        }
    }
}

// 插入排序实现
void insertionSort(std::vector<int>& arr) {
    int n = arr.size();
    for (int i = 1; i < n; i++) {
        int key = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j+1] = arr[j];
            j--;
        }
        arr[j+1] = key;
    }
}

// 选择排序实现
void selectionSort(std::vector<int>& arr) {
    int n = arr.size();
    for (int i = 0; i < n-1; i++) {
        int min_idx = i;
        for (int j = i+1; j < n; j++) {
            if (arr[j] < arr[min_idx]) {
                min_idx = j;
            }
        }
        std::swap(arr[i], arr[min_idx]);
    }
}

int main() {
    // 生成10000个随机数作为测试数据
    std::vector<int> testArr(10000);
    std::generate(testArr.begin(), testArr.end(), [](){ return rand() % 10000; });
    
    // 统计冒泡排序耗时
    auto bubbleArr = testArr;
    auto start = std::chrono::high_resolution_clock::now();
    bubbleSort(bubbleArr);
    auto end = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
    std::cout << "冒泡排序运行时长:" << duration.count() << " ms\n";
    
    // 统计插入排序耗时
    auto insertionArr = testArr;
    start = std::chrono::high_resolution_clock::now();
    insertionSort(insertionArr);
    end = std::chrono::high_resolution_clock::now();
    duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
    std::cout << "插入排序运行时长:" << duration.count() << " ms\n";
    
    // 统计选择排序耗时
    auto selectionArr = testArr;
    start = std::chrono::high_resolution_clock::now();
    selectionSort(selectionArr);
    end = std::chrono::high_resolution_clock::now();
    duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
    std::cout << "选择排序运行时长:" << duration.count() << " ms\n";
    
    return 0;
}

注意事项

  • 如果测试数据量过小导致排序执行太快,毫秒级返回结果为0,可以把单位替换为微秒std::chrono::microseconds获取更高精度的结果,也可以让排序函数循环执行多次后取平均值,统计结果会更准确。
  • 不推荐使用C标准库的clock()函数,该函数统计的是CPU占用时间而非实际墙钟时间,多线程场景下统计结果偏差极大,精度也低于<chrono>库接口。
  • <chrono>是纯头文件的标准库组件,编译时不需要链接额外库,所有主流编译器(GCC、Clang、MSVC)都完全支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:45:00