$\huge \color{ orange}{ 成仙之路->}$ $\huge \color{ purple}{ 算法基础课题解}$
思路:
1. 分解成子问题
2. 处理其中一个子问题
3. 再递归处理子问题
完整代码1
#include <iostream>
using namespace std;
const int N = 100010;
int n, a[N];
void quick_sort(int q[], int l, int r) {
if (l >= r) return;
//左边都是小于 x 的,右边都是大于 x 的
int i = l - 1, j = r + 1, x = q[l + r >> 1];
while (i < j) {
while (q[++i] < x); //找到左边大于等于x的第一个值
while (q[--j] > x); //找到左边小于等于x的第一个值
if (i < j) swap(q[i], q[j]); //交换
}
//递归处理子问题
quick_sort(q, l, j), quick_sort(q, j + 1, r);
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
quick_sort(a, 0, n - 1);
for (int i = 0; i < n; i++) cout << a[i] << ' ';
return 0;
}
完整代码2
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int n, a[N];
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
sort(a, a + n); //系统自带函数
for (int i = 0; i < n; i++) cout << a[i] << ' ';
return 0;
}
牛