3.2 KiB
Sorting Algorithm Performance Analysis
This project implements and analyzes the performance of several classic sorting algorithms in C++. It provides a framework to test each algorithm on randomly generated data of various sizes, measuring execution time, comparison counts, and move counts.
A detailed analysis and discussion of the results can be found in REPORT.md.
Implemented Algorithms
-
Basic Sorting Algorithms:
- Insertion Sort
- Bubble Sort
- Shell Sort
- Merge Sort
-
Quick Sort Variants:
- Standard Quick Sort (pivot is the last element)
- Quick Sort with Median-of-Three pivot optimization
- 3-Way Quick Sort (for handling duplicate keys)
- Dual-Pivot Quick Sort
How to Build and Run
A Makefile is provided to simplify the build and execution process.
1. Build the Project
To compile all the source files and create the executable, run:
make
This will generate an executable file named sorting_experiment.
2. Run the Experiment
To run the performance analysis, execute the following command:
make run
Alternatively, you can run the executable directly:
./sorting_experiment
The program will output a formatted table with the performance metrics for each algorithm across different data sizes.
3. Clean Up
To remove the compiled object files and the executable, run:
make clean
Original Experiment Requirements
实验内容
对几种经典的排序算法进行分析,理解算法在不同输入时的表现,深入剖析算法优缺点及其根源。具体要求如下:
- 实现常见排序算法,至少要实现插入排序、冒泡排序、快速排序、归并排序、shell排序算法;
- 在排序算法中插桩,记录关键操作次数(如比较次数、移动次数等);
- 以待排序文件的行数n为输入规模,固定n随机产生多组测试样本,统计算法的平均运行时间和关键操作次数,改变n的规模重复多次实验,并对结果进行统计;
- 改变数组规模,对不同规模问题下各算法的结果进行统计并绘制图表,与理论值进行对照分析;
- 优化快速排序的中枢点选取,对优化前后的性能进行分析;
- 对快速排序的三种实现进行性能比较。
附加:
- 实现BlockQuickSort,就分支预测次数展开分析;
- 实现DualPivotQuickSort,就递归深度展开分析;
- 在超大规模数据上(如1亿个整数),对比以上快排实现的性能。
编写实验文档:
要求对所实现算法的时间进行复杂度分析(结合程序统计关键步骤运行次数,以验证分析结果);程序运行指导,包括程序编译说明、输入输出示例等。如果输入、输出信息较多,建议采用文件进行格式化输入、输出。实验报告:解题思路;所实现算法的时间复杂度分析(结合程序统计关键步骤运行次数,以验证分析结果);程序运行指导,包括程序编译说明、输入输出示例等。如果输入、输出信息较多,建议采用文件进行格式化输入、输出。