实现快速排序算法,基准元素随机选取。要排序的整型数组元素可以用随机数生成器生成,运行程序,记录分别对十万,一百万,一千万,五千万个数据排序所用的时间,列出表格显示统计出来的时间。并单独显示一个100个数据的排序结果。用C++解决
时间: 2024-02-25 16:55:16 浏览: 69
好的,我来回答你的问题。
以下是使用C++实现快速排序算法,基准元素随机选取的代码:
```cpp
#include <iostream>
#include <ctime>
using namespace std;
void quickSort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right, pivot = arr[rand() % (right - left + 1) + left];
while (i <= j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i <= j) {
swap(arr[i], arr[j]);
i++;
j--;
}
}
quickSort(arr, left, j);
quickSort(arr, i, right);
}
int main() {
srand(time(0));
int n = 10000000;
int* arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = rand();
}
clock_t start = clock();
quickSort(arr, 0, n - 1);
clock_t end = clock();
cout << "Sorting " << n << " elements took " << (double)(end - start) / CLOCKS_PER_SEC << " seconds." << endl;
// 打印前100个元素
for (int i = 0; i < 100; i++) {
cout << arr[i] << " ";
}
cout << endl;
delete[] arr;
return 0;
}
```
接下来是对数据进行统计和展示的代码:
```cpp
#include <iostream>
#include <ctime>
using namespace std;
void quickSort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right, pivot = arr[rand() % (right - left + 1) + left];
while (i <= j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i <= j) {
swap(arr[i], arr[j]);
i++;
j--;
}
}
quickSort(arr, left, j);
quickSort(arr, i, right);
}
int main() {
srand(time(0));
int sizes[] = { 100000, 1000000, 10000000, 50000000 };
int num_sizes = sizeof(sizes) / sizeof(sizes[0]);
cout << "Size\tTime (s)" << endl;
for (int i = 0; i < num_sizes; i++) {
int n = sizes[i];
int* arr = new int[n];
for (int j = 0; j < n; j++) {
arr[j] = rand();
}
clock_t start = clock();
quickSort(arr, 0, n - 1);
clock_t end = clock();
cout << n << "\t" << (double)(end - start) / CLOCKS_PER_SEC << endl;
delete[] arr;
}
// 打印前100个元素
int n = 100;
int* arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = rand();
}
quickSort(arr, 0, n - 1);
cout << "Top 100 sorted elements: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
delete[] arr;
return 0;
}
```
这段代码会对四个不同大小的数据进行排序,输出每个数据所需的时间。同时,它还会生成一个包含100个元素的数组,并对其进行排序,输出排序后的前100个元素。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)