#include <bits/stdc++.h>
using namespace std;
int n,a[100000];
void quick_sort(int a[], int l, int r) {
if (l < r) {
int i = l, j = r, x = a[l];
while (i < j) {
while (i < j && a[j] >= x) // 从右向左找第一个小于x的数
j--;
if (i < j)
a[i++] = a[j];
while (i < j && a[i] < x) // 从左向右找第一个大于等于x的数
i++;
if (i < j)
a[j--] = a[i];
}
a[i] = x;
quick_sort(a, l, i - 1);
quick_sort(a, i + 1, r);
}
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
quick_sort(a, 1, n);
for (int i = 1; i <= n; i++) {
printf("%d
", a[i]);
}
}
#include <bits/stdc++.h>
using namespace std;
int n,a[100000];
void quick_sort(int l,int r)//应用二分思想
{
//rand() % (right - left + 1) + left;
int mid=a[rand() % (r- l+ 1) + l];
//int mid = a[(l + r) / 2];//中间数
int i = l, j = r;
do {
while (a[i] < mid) i++;//查找左半部分比中间数大的数
while (a[j] > mid) j--;//查找右半部分比中间数小的数
if (i <= j)//如果有一组不满足排序条件(左小右大)的数
{
swap(a[i], a[j]);//交换
i++;
j--;
}
} while (i <= j);//这里注意要有=
if (l < j) quick_sort(l, j);//递归搜索左半部分
if (i < r) quick_sort(i, r);//递归搜索右半部分
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
quick_sort(1, n);
for (int i = 1; i <= n; i++) {
printf("%d ", a[i]);
}
}