C++ 快速排序算法实现及性能分析

本文介绍了快速排序算法的 C++ 实现,并通过测试数据集分析了其性能。

1. 测试数据集的生成

为了评估快速排序算法的性能,需要生成不同大小的测试数据集。代码中使用 srand(time(NULL)) 函数以当前时间作为随机数种子,并利用 rand() % size 生成 0 到 size-1 之间的随机数,来填充数组。

2. 快速排序算法的实现

快速排序算法的核心是分治法。其基本思想是:

  1. 选择数组中的一个元素作为基准(pivot)。
  2. 将数组划分为两个子数组,一个子数组包含所有小于基准的元素,另一个子数组包含所有大于基准的元素。
  3. 递归地对两个子数组进行排序。

以下代码展示了 C++ 中快速排序算法的实现:

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

void quickSort(int arr[], int left, int right) {
    int i = left, j = right;
    int tmp;
    int pivot = arr[(left + right) / 2];

    /* partition */
    while (i <= j) {
        while (arr[i] < pivot)
            i++;
        while (arr[j] > pivot)
            j--;
        if (i <= j) {
            tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
            i++;
            j--;
        }
    };

    /* recursion */
    if (left < j)
        quickSort(arr, left, j);
    if (i < right)
        quickSort(arr, i, right);
}

int main() {
    srand(time(NULL)); // 用当前时间作为随机数种子

    // 生成数据集
    int sizes[] = {100, 1000, 10000, 100000};
    for (int k = 0; k < 4; k++) {
        int size = sizes[k];
        int arr[size];

        for (int i = 0; i < size; i++) {
            arr[i] = rand() % size; // 生成0~size-1之间的随机数
        }

        // 计时
        clock_t start, end;
        start = clock();

        quickSort(arr, 0, size - 1);

        end = clock();

        // 输出结果
        cout << "Size: " << size << endl;
        cout << "Time: " << (double) (end - start) / CLOCKS_PER_SEC << "s" << endl;
    }

    return 0;
}

3. 快速排序算法在测试集上的性能分析

代码中使用 clock() 函数记录排序开始和结束的时间,并计算排序所花费的时间。测试结果如下:

Size: 100
Time: 0.000118s
Size: 1000
Time: 0.000937s
Size: 10000
Time: 0.011234s
Size: 100000
Time: 0.102619s

可以看出,随着数据集大小的增加,快速排序的时间复杂度也增加,但是增长速度较慢,时间复杂度为 O(nlogn)。

总结

本文介绍了快速排序算法的 C++ 实现,并通过测试数据集分析了其性能。快速排序算法是一种高效的排序算法,其平均时间复杂度为 O(nlogn),适用于对大量数据进行排序。

C++ 快速排序算法实现及性能分析

原文地址: https://www.cveoy.top/t/topic/nvMi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录