将读入的 N N N 个数从小到大排序后输出。
第一行为一个正整数 N N N。
第二行包含 N N N 个空格隔开的正整数 a i a_i ai?,为你需要进行排序的数。
将给定的 N N N 个数从小到大输出,数之间空格隔开,行末换行且无空格。
5
4 2 4 5 1
1 2 4 4 5
对于 20 % 20\% 20% 的数据,有 1 ≤ N ≤ 1 0 3 1 \leq N \leq 10^3 1≤N≤103;
对于 100 % 100\% 100% 的数据,有 1 ≤ N ≤ 1 0 5 1 \leq N \leq 10^5 1≤N≤105, 1 ≤ a i ≤ 1 0 9 1 \le a_i \le 10^9 1≤ai?≤109。
#include <iostream>
#include<vector>
using namespace std;
int n;
int nums[100005];
void merge(int* arr, int left, int mid, int right) {
vector<int> help;
int p1 = left;
int p2 = mid + 1;
int k = 0;
while (p1 <= mid && p2 <= right) {
if (arr[p1] <= arr[p2]) {
help.push_back(arr[p1]);
p1++;
}
else {
help.push_back(arr[p2]);
p2++;
}
}
while (p1 <= mid) {
help.push_back(arr[p1]);
p1++;
}
while (p2 <= right) {
help.push_back(arr[p2]);
p2++;
}
for (int i = left; i <= right; i++) {
arr[i] = help[k++];
}
}
void merge_sort(int* arr, int left, int right) {
if (left == right) return;
int mid = left + ((right - left) >> 1);
merge_sort(arr, left, mid);
merge_sort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
int main() {
// 输入数据
cin >> n;
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
merge_sort(nums, 0, n - 1);
for (int i = 0; i < n; i++) {
cout << nums[i] << " ";
}
return 0;
}