c++快速排序.输入size=1000000,创建998组随机整数,数据范围在0到1000000之间,请记录这998组整数排序的运行时间。
时间: 2024-12-17 17:24:53 浏览: 7
快速排序 分治法——C++代码
快速排序是一种高效的排序算法,它通过分治策略来工作。在C++中,可以使用`std::chrono`库来测量代码执行的时间。首先,你需要生成998组随机整数并存储在一个数组中。然后,你可以选择一个随机元素作为枢轴(pivot),将数组分为两部分,一部分包含所有小于枢轴的元素,另一部分包含大于或等于枢轴的元素,这个过程叫做分区(partition)。
下面是一个简单的示例,展示了如何使用快速排序对大小为1000000的数组进行排序,并测量时间:
```cpp
#include <iostream>
#include <vector>
#include <cstdlib> // for rand
#include <ctime> // for srand
#include <chrono>
void quickSort(std::vector<int>& arr, int low, int high) {
if (low < high) {
auto pi = partition(arr, low, high);
quickSort(arr, low, pi - 1); // sort elements before pivot
quickSort(arr, pi + 1, high); // sort elements after pivot
}
}
int partition(std::vector<int>& arr, int low, int high) {
int pivot = arr[high]; // choose last element as pivot
int i = low - 1;
for (int j = low; j < high; j++) {
if (arr[j] <= pivot) {
i++;
std::swap(arr[i], arr[j]);
}
}
std::swap(arr[i + 1], arr[high]);
return i + 1;
}
int main() {
srand(time(0)); // seed random number generator
const size_t size = 1000000;
std::vector<int> data(size);
// Fill the vector with random numbers between 0 and 1000000
for (size_t i = 0; i < size; ++i)
data[i] = rand() % 1000001;
auto start = std::chrono::high_resolution_clock::now();
quickSort(data, 0, data.size() - 1);
auto end = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
double time_taken = static_cast<double>(duration.count()) / 1000000.0; // convert to milliseconds
std::cout << "Time taken for sorting: " << time_taken << "ms" << std::endl;
// Repeat this process for the remaining 997 groups of random integers...
// ...and record the times.
return 0;
}
```
注意,这个示例只包含了单次排序的时间。为了得到998组随机整数排序的总时间,你需要循环执行上述步骤,并累加每次排序所花费的时间。
阅读全文