- aeo_lian 的博客
归并排序
- 2024-10-3 15:55:20 @
归并排序
题目描述
将读入的 N 个数从小到大排序后输出。
输入格式
第一行为一个正整数 N。
第二行包含 N 个空格隔开的正整数 ai,为你需要进行排序的数。
将给定的 N 个数从小到大输出,数之间空格隔开,行末换行且无空格。
5
4 2 4 5 1
1 2 4 4 5
提示
对于 20% 的数据,有 1≤N≤103;
对于 100% 的数据,有 1≤N≤1****5,1≤a[i]≤1****9。
要求
请用归并排序算法完成此题。
模板
#include <iostream>
using namespace std;
int a[100000005], tmp[10000005];
void ms(int q[], int l, int r)
{
if (l >= r) return;
int mid = l + r >> 1;
ms(q, l, mid), ms(q, mid + 1, r);
int k = 0, i = l, j = mid + 1;
while (i <= mid && j <= r)
if (q[i] <= q[j]) tmp[k++] = q[i++];
else tmp[k++] = q[j++];
while (i <= mid) tmp[k++] = q[i++];
while (j <= r) tmp[k++] = q[j++];
for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j];
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
ms(a, 0, n - 1);
for (int i = 0; i < n; i++) cout << a[i] << " ";
return 0;
}