#include <iostream>
using namespace std;
// 分区函数:选最左侧元素作为 pivot
int partition(int arr[], int left, int right) {
int pivot = arr[left]; // 先把最左侧元素保存起来
int i = left;
int j = right;
while (i < j) {
// 1. 从右往左找第一个小于 pivot 的数
while (i < j && arr[j] >= pivot) {
j--;
}
// 找到了,就把它放到左边的“坑”里
if (i < j) {
arr[i] = arr[j];
i++;
}
// 2. 从左往右找第一个大于 pivot 的数
while (i < j && arr[i] <= pivot) {
i++;
}
// 找到了,就把它放到右边的“坑”里
if (i < j) {
arr[j] = arr[i];
j--;
}
}
// 3. i == j,此时这个位置就是 pivot 的最终位置
arr[i] = pivot;
return i;
}
// 快速排序
void quickSort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int mid = partition(arr, left, right);
quickSort(arr, left, mid - 1);
quickSort(arr, mid + 1, right);
}
int main() {
int n;
cin >> n;
int *arr = new int[n];
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
quickSort(arr, 0, n - 1);
for (int i = 0; i < n; i++) {
cout << arr[i];
if (i < n - 1) cout << " ";
}
cout << endl;
delete[] arr;
return 0;
}
快速排序(Quick Sort)的挖坑法实现
最新推荐文章于 2026-06-22 19:04:06 发布
的挖坑法实现&spm=1001.2101.3001.5002&articleId=161984300&d=1&t=3&u=f06e63dcc25c402080b6c9a1d9fe1034)
4097

被折叠的 条评论
为什么被折叠?



