题目描述
输入一个数组a,数组的前半部分是升序的,后半部分也是升序的。请将数组a的元素按升序输出。
输入描述
输入有2行数字。
第一行有1个数字n,表示数组a有多少个元素。
第二行是n个整数。
输出描述
由小到大排列好的数组。数字之间用空格分隔。
输入样例
6
1 3 5 2 4 6
输出样例
1 2 3 4 5 6
#include <iostream>
#define N 100010
using namespace std;
int a[N];
void merge(int a[], int left, int right){
int b[N];
int mid = (left + right) / 2;
for (int i = left; i <= right; ++i)
b[i] = a[i];
int i = left, j = mid + 1;
for (int k = left; k <= right; ++k) {
if (j > right || i <= mid && b[i] < b[j])
a[k] = b[i++];
else
a[k] = b[j++];
}
}
void merge_sort(int a[], int left, int right){
int mid;
if ( left < right ){
mid = (left + right) / 2;
merge_sort(a, left, mid);
merge_sort(a, mid + 1, right);
merge(a, left, right);
}
}
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> a[i];
merge_sort(a, 1, n);
for (int i = 1; i <= n; ++i) printf("%d ", a[i]);
return 0;
}