洛谷P1177 【模板】排序

题目描述

将读入的 NN 个数从小到大排序后输出。

输入格式

第一行为一个正整数 NN

第二行包含 NN 个空格隔开的正整数 aia_i,为你需要进行排序的数。

输出格式

将给定的 NN 个数从小到大输出,数之间空格隔开,行末换行且无空格。

样例 #1

样例输入 #1

5
4 2 4 5 1

样例输出 #1

1 2 4 4 5

提示

对于 20%20\% 的数据,有 1N1031 \leq N \leq 10^3

对于 100%100\% 的数据,有 1N1051 \leq N \leq 10^51ai1091 \le a_i \le 10^9

离谱题解

40 分

#include <bits/stdc++.h>
using namespace std;

int n, a[100020];

void qsort(int n[], int l, int r) {
	int i = l, j = r, flag = a[(l + r) / 2];
	do {
		while (n[i] < flag)
			i++;
		while (n[j] > flag)
			j--;
		if (i <= j)
			swap(n[i++], n[j--]);
	} while (i <= j);
	if (i < j)
		qsort(n, l, j);
	if (i < r)
		qsort(n, i, r);
}

int main() {
	cin >> n;
	for (int i = 0; i < n; i++)
		scanf("%d", &a[i]);
	qsort(a, 0, n - 1);
	for (int i = 0; i < n; i++)
		cout << a[i] << ' ';
	return 0;
}

AC

#include <bits/stdc++.h>
using namespace std;

int n, a[100010];

/*void qsort(int n[], int l, int r) {
	int i = l, j = r, flag = a[(l + r) / 2];
	do {
		while (n[i] < flag)
			i++;
		while (n[j] > flag)
			j--;
		if (i <= j)
			swap(n[i++], n[j--]);
	} while (i <= j);
	if (i < j)
		qsort(n, l, j);
	if (i < r)
		qsort(n, i, r);
}*/

int main() {
	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> a[i];
	//qsort(a, 0, n - 1);
	sort(a, a + n);
	for (int i = 0; i < n; i++)
		cout << a[i] << ' ';
	return 0;
}