C++ 快速排序 输入格式: 输入在第1行中给出N(1 ≤ N ≤ 10000),在第2行中给出N个待排序的整数,数字间以空格分隔。 输出格式: 在一行中输出排序后的数列,数字间以空格分隔,但末尾不得有多余空格。
时间: 2024-10-27 14:10:36 浏览: 17
信息学奥赛一本通-教程PPT课件(第五版)算法部分 第二章 数据排序.pdf
快速排序是一种高效的排序算法,它通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。对于输入的C++程序来说,你可以按照以下步骤来设计:
1. **读取输入**:
- 首先,从标准输入读取数据,获取整数N作为元素的数量,并存储在变量n中。
- 然后,再读入接下来的一行,这行包含了n个以空格分隔的整数,将它们放入一个动态数组或向量`arr`中。
```cpp
int n;
cin >> n;
vector<int> arr(n);
for (int i = 0; i < n; ++i) {
cin >> arr[i];
}
```
2. **选择枢轴并分区**:
- 通常,可以选择第一个元素作为枢轴(pivot),也可以随机选取。
- 使用两个指针,一个从开始位置往右扫描,一个从末尾往左扫描,找到合适的交换点,使得枢轴左边的所有元素都小于等于枢轴,右边所有元素都大于枢轴。
3. **递归排序**:
- 对枢轴左侧和右侧的子数组分别进行递归的快速排序。
- 当子数组长度小于一定阈值(例如2)时,停止递归,直接插入排序。
4. **合并结果**:
- 递归完成后,原地更新数组`arr`即可得到排序的结果。
5. **输出结果**:
- 最后,遍历排序后的数组,将元素连接成字符串并输出,注意末尾不应有额外空格。
```cpp
// ...其他代码...
for (int i : arr) {
cout << i << " ";
}
cout << "\n"; // 添加换行符
```
完整的代码可能会包括上述步骤的实现,但是在这里只给出了大体框架。以下是伪代码形式的示例:
```cpp
#include <iostream>
#include <vector>
void quickSort(std::vector<int>& arr, int left, int right) {
if (left < right) {
// ... 分区和递归调用 ...
}
}
int main() {
int n;
std::cin >> n;
std::vector<int> arr(n);
for (int& num : arr) {
std::cin >> num;
}
quickSort(arr, 0, arr.size() - 1);
// ... 输出排序后的数组 ...
return 0;
}
```
阅读全文