first commit
This commit is contained in:
82
sort_closet/code-sorting/README-zh.md
Normal file
82
sort_closet/code-sorting/README-zh.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# 排序算法性能分析项目
|
||||
|
||||
本项目使用 C++ 实现并深入分析了多种经典排序算法的性能。项目提供了一个自动化测试框架,能够在不同规模的随机生成数据集上对每种算法进行测试,并精确测量其**执行时间**、**比较次数**和**移动次数**,以供量化分析。
|
||||
|
||||
## 项目内容与实现方式
|
||||
|
||||
### 1. 模块化的算法实现
|
||||
为了保证代码的清晰度和可扩展性,每一种排序算法都作为独立的模块在各自的 `.cpp` 文件中实现。所有算法的函数声明都统一在 `algorithm.h` 头文件中进行管理。
|
||||
|
||||
这种结构使得添加新的算法或修改现有算法变得非常简单。
|
||||
|
||||
### 2. 精确的性能指标统计
|
||||
为了超越单纯的运行时间测量,本项目在每种排序算法的实现内部进行了“插桩”,以统计两个核心的性能指标:
|
||||
- **比较次数 (Comparisons)**:算法执行过程中元素之间进行比较的总次数。
|
||||
- **移动次数 (Moves)**:算法执行过程中数据的赋值、交换等移动操作的总次数。一个 `std::swap` 操作计为3次移动。
|
||||
|
||||
这些数据为理论复杂度分析提供了有力的实验验证。
|
||||
|
||||
### 3. 自动化的测试与分析框架
|
||||
项目核心是一个位于 `main.cpp` 的自动化测试框架,其主要功能包括:
|
||||
- **多算法支持**:能够自动运行所有已实现的排序算法。
|
||||
- **多规模测试**:支持在一系列预设的数据规模(例如 100, 1000, ..., 500,000)上进行测试。
|
||||
- **结果可靠性**:通过对每个规模进行多次重复实验并计算平均值,有效消除了单次运行的随机性误差。
|
||||
- **正确性校验**:在每次排序任务完成后,自动检查数组是否真正有序,确保了算法实现的正确性。
|
||||
- **格式化输出**:将所有测试结果以清晰的表格形式输出到控制台,方便用户阅读和分析。
|
||||
|
||||
## 已实现的排序算法
|
||||
|
||||
本项目共实现了以下算法:
|
||||
|
||||
#### 基础排序算法
|
||||
- **插入排序 (Insert Sort)**
|
||||
- **冒泡排序 (Bubble Sort)**
|
||||
- **希尔排序 (Shell Sort)**
|
||||
- **归并排序 (Merge Sort)**
|
||||
|
||||
#### 快速排序 (Quick Sort) 变体
|
||||
- **标准快速排序**:选择最后一个元素作为基准点。
|
||||
- **三数取中优化快速排序 (QuickSortOptimized)**:通过“三数取中”策略选择基准点,以提高算法在特殊数据(如部分有序)下的稳定性。
|
||||
- **三路快速排序 (QuickSort3Way)**:特别适用于处理含有大量重复元素的数组。
|
||||
- **双基准快速排序 (Dual-Pivot Quick Sort)**:使用两个基准点将数组划分为三部分,理论上能减少比较次数,在现代处理器上性能优异。
|
||||
|
||||
## 如何编译与运行
|
||||
|
||||
项目提供了一个 `Makefile` 文件,极大地简化了编译、运行和清理流程。
|
||||
|
||||
### 1. 编译项目
|
||||
在项目根目录下,执行以下命令来编译所有源代码:
|
||||
```bash
|
||||
make
|
||||
```
|
||||
该命令会自动调用 `g++` 编译器,并将所有 `.cpp` 文件编译链接成一个名为 `sorting_experiment` 的可执行文件。
|
||||
|
||||
### 2. 运行实验
|
||||
编译成功后,执行以下命令来运行完整的性能分析测试:
|
||||
```bash
|
||||
make run
|
||||
```
|
||||
你也可以直接运行生成的可执行文件:
|
||||
```bash
|
||||
./sorting_experiment
|
||||
```
|
||||
程序启动后,将开始对所有算法和所有预设规模进行测试,并将结果实时输出到控制台。
|
||||
|
||||
### 3. 清理生成文件
|
||||
如果你想删除所有编译生成的目标文件 (`.o`) 和可执行文件,可以运行:
|
||||
```bash
|
||||
make clean
|
||||
```
|
||||
|
||||
## 输出结果解读
|
||||
|
||||
程序的输出是一个性能指标表格,每一行代表一种算法在一个特定数据规模下的平均测试结果。
|
||||
|
||||
| 列名 | 中文说明 |
|
||||
| :--- | :--- |
|
||||
| **Algorithm** | 被测试的排序算法的名称。 |
|
||||
| **Size** | 当前测试的数组大小(即数据规模 `n`)。 |
|
||||
| **Avg Time (s)** | 多次重复测试下的平均运行时间,单位为秒。 |
|
||||
| **Avg Comparisons**| 平均比较操作的次数。 |
|
||||
| **Avg Moves** | 平均移动(赋值或交换)操作的次数。 |
|
||||
| **Correct?** | 排序结果是否正确,"Yes" 代表正确无误。 |
|
||||
Reference in New Issue
Block a user