利用快速排序算法将读入的 N N N 个数从小到大排序后输出。
快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++ 选手请不要试图使用 STL,虽然你可以使用 sort 一遍过,但是你并没有掌握快速排序算法的精髓。)
第 1 1 1 行为一个正整数 N N N,第 2 2 2 行包含 N N N 个空格隔开的正整数 a i a_i ai,为你需要进行排序的数,数据保证了 A i A_i Ai 不超过 1 0 9 10^9 109。
将给定的 N N N 个数从小到大输出,数之间空格隔开,行末换行且无空格。
5
4 2 4 5 1
1 2 4 4 5
对于 20 % 20\% 20% 的数据,有 N ≤ 1 0 3 N\leq 10^3 N≤103;
对于 100 % 100\% 100% 的数据,有 N ≤ 1 0 5 N\leq 10^5 N≤105。

快排就是分治算法,先分成两段,再分别继续去分这两段;
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N];
void quick_sort(int a[], int l, int r) {
if (l >= r) return;//递归出口
int x = a[l + (r - l) / 2];
int i = l - 1, j = r + 1;
while (i < j) {
do i++; while (a[i] < x);
do j--; while (a[j] > x);
if (i < j)
swap(a[i], a[j]);
}
quick_sort(a, l, j);
quick_sort(a, j + 1, r);
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
scanf("%d", &a[i]);
}
quick_sort(a, 0, n - 1);
for (int i = 0; i < n; ++i) {
printf("%d ", a[i]);
}
return 0;
}