题目1:给定n个数值,从小到大排序。 要求: 输入随机生成0≦x≦109数组,长度分别为5、10、100; 采用三种排序(快速排序、归并排序、插入排序算法)输出每次执行的排序结果 时间复杂度、空间复杂度、实际执行时间、实际占用内存空间?用c++给出代码
时间: 2024-10-08 19:22:53 浏览: 102
合并排序数组:给定两个排序的整数数组nums1和nums2,将nums2合并为nums1作为一个排序的数组
题目1的要求是通过C++实现对随机生成的整数数组进行排序,并比较不同排序算法的性能,包括快速排序(QuickSort)、归并排序(MergeSort)和插入排序(InsertionSort)。这里我会简要介绍每种算法以及它们的时间复杂度、空间复杂度,并提供一个简单的示例代码。
### 1. 快速排序 (QuickSort)
**时间复杂度**: 平均情况下的最优时间复杂度是O(n log n),最坏情况(数组已排序或反序)下是O(n^2)。
**空间复杂度**: 约为O(log n),取决于递归栈深度。
**代码片段**:
```cpp
#include <iostream>
using namespace std;
void quicksort(int arr[], int low, int high) {
if (low < high) {
// 分治策略
int pivot = partition(arr, low, high);
quicksort(arr, low, pivot - 1); // 左半部分
quicksort(arr, pivot + 1, high); // 右半部分
}
}
int partition(int arr[], int low, int high) {
// 其他细节...
}
// 主函数展示排序结果
int main() {
int n;
cout << "Enter array length: ";
cin >> n;
int arr[n];
// 生成数组并排序
// ...
quicksort(arr, 0, n - 1);
// 输出排序后的数组
for (int i = 0; i < n; ++i)
cout << arr[i] << " ";
return 0;
}
```
### 2. 归并排序 (MergeSort)
**时间复杂度**: 总是保持在O(n log n),因为它是稳定的排序算法。
**空间复杂度**: 约为O(n),需要额外的存储空间合并两个有序数组。
**代码片段**:
```cpp
#include <vector>
using namespace std;
void mergeSort(int arr[], int l, int r) {
// 合并操作省略
}
int main() {
// 类似于快速排序,这里创建堆栈用于合并
// ...
mergeSort(arr, 0, n - 1);
// 输出结果
// ...
}
```
### 3. 插入排序 (InsertionSort)
**时间复杂度**: 最好、最差和平均情况都是O(n^2),但对于近乎有序的小数组,效率较高。
**空间复杂度**: O(1),原地排序,不需要额外空间。
**代码片段**:
```cpp
void insertionSort(int arr[], int n) {
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;
}
}
// 主函数展示排序结果
int main() {
// ...
insertionSort(arr, n);
// 输出排序后的数组
// ...
}
``---
对于实际执行时间和空间占用,您需要在运行环境中测试,可以使用`chrono::high_resolution_clock`测量执行时间,使用操作系统工具查看程序运行时的内存使用情况。记得在代码执行结束后释放不再使用的动态内存,以减少内存占用。
阅读全文