c++冒泡排序分别随机生成问题规模为10、100、1000、10000的正序和逆序和随机的初始排列
时间: 2024-10-02 20:02:10 浏览: 59
冒泡排序 的动态演示 动画 C++写
5星 · 资源好评率100%
冒泡排序是一种简单的排序算法,它通过反复交换相邻元素,逐步将较大的数"浮"到数组的顶端。对于不同规模的问题,如10、100、1000、10000,其时间复杂度都是O(n^2),但由于实际操作次数会随着数据量增加而减少(已排序部分不会再次比较),所以在小规模下效率相对较高。
以下是针对不同规模的正序、逆序和随机初始排列的描述:
1. **正序(从小到大)**:
- 对于10个元素,快速完成排序,因为数据少,所有元素都只需几轮就能到达正确位置。
- 100个元素可能需要多次循环,但仍然会在几次内完成。
- 对于1000和10000个元素,可能会有显著的时间消耗,但如果优化处理边界情况,也可以看到明显的提升。
2. **逆序(从大到小)**:
- 冒泡排序在此场景下性能最差,因为每次都需要交换最大值到正确位置。
- 对于10个元素,可能也需要遍历整个序列。
- 1000和10000的逆序数据,排序过程会非常耗时,几乎接近于最坏的情况。
3. **随机初始排列**:
- 这种情况下,排序过程平均化了最好和最坏的情况。虽然不是直接排序好或坏,但仍需按顺序逐个比较和交换。
- 随着元素数量的增加,算法性能会更依赖于随机分布是否利于优化。
为了演示上述情况,你需要编写一段C++代码,对每种情况进行模拟,包括生成随机数、进行冒泡排序以及打印排序后的结果。同时,你可以测量并记录不同规模下的运行时间,以便理解性能变化趋势。以下是简化的示例代码片段:
```cpp
#include <iostream>
#include <vector>
#include <ctime>
void bubbleSort(int arr[], int n) {
// 实现冒泡排序...
}
int main() {
srand(time(0)); // 设置随机种子
for (int size = 10; size <= 10000; size *= 10) {
std::vector<int> sortedArr(size), randomArr(size);
// 生成正序
for (int i = 0; i < size; ++i) {
sortedArr[i] = i;
}
bubbleSort(sortedArr.data(), size);
std::cout << "Sorted array of size " << size << ": ";
// 打印结果...
// 生成逆序
for (int i = 0; i < size; ++i) {
randomArr[size - i - 1] = rand() % size + 1;
}
bubbleSort(randomArr.data(), size);
std::cout << "Reversed array of size " << size << ": ";
// 打印结果...
// 生成随机排列
for (int& num : randomArr) {
num = rand() % size + 1;
}
bubbleSort(randomArr.data(), size);
std::cout << "Randomly arranged array of size " << size << ": ";
// 打印结果...
}
return 0;
}
```
阅读全文