请用C++代码完整输出。按快速排序原理实现排序。要求运行后控制台输入待排序数据,并显示快速排序过程中第一趟划分结果以及排序结果。
时间: 2024-10-13 13:08:36 浏览: 18
快速排序是一种高效的排序算法,通常采用分治策略。以下是C++代码实现快速排序的一个简化版本,包括输入数据和打印分割后的结果:
```cpp
#include <iostream>
using namespace std;
// 快速排序函数
void quickSort(int arr[], int low, int high) {
if (low < high) {
// 找到分区点
int pivotIndex = partition(arr, low, high);
// 对左右两个子数组递归地调用快速排序
quickSort(arr, low, pivotIndex - 1); // 左侧子数组
quickSort(arr, pivotIndex + 1, high); // 右侧子数组
}
}
// 分区函数,返回基准元素的索引
int partition(int arr[], int low, int high) {
int pivot = arr[high]; // 基准元素
int i = low - 1; // 指针,用于找到小于基准元素的正确位置
for (int j = low; j < high; j++) {
if (arr[j] < pivot) {
i++; // 将小于基准的元素移到左边
swap(arr[i], arr[j]);
}
}
swap(arr[i + 1], arr[high]); // 将基准元素放到正确的位置
return i + 1;
}
// 主函数,读取数据并进行排序
int main() {
int n;
cout << "Enter the number of elements: ";
cin >> n;
int arr[n];
cout << "Enter " << n << " numbers: ";
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
// 打印原始数组
cout << "Original array: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
quickSort(arr, 0, n - 1);
// 打印第一趟划分后的数组(这里假设每次划分都是对半的)
cout << "After first partition (pivot at index " << (n / 2) << "): ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
// 打印排序后的数组
cout << "Sorted array: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
运行此程序,它会提示用户输入要排序的数字,然后展示排序过程的第一趟划分结果(这里仅作为示例,实际划分可能不是均匀的)以及最终排序的结果。
阅读全文