AcWing 787. 归并排序---循环读入+模板
原题链接
简单
作者:
hello莫妮卡
,
2020-04-14 18:18:56
,
所有人可见
,
阅读 2
#include <iostream>
using namespace std;
const int N = 100000;
int temp[N];
void merge_sort(int a[], int l, int r)
{
/*代码分为四个部分这样拆分成迭代也好拆*/
//第一部分是通过递归缩小合并区间
if (l >= r) return;
int mid = l + r >> 1;
merge_sort(a, l, mid);
merge_sort(a, mid+1, r);
//第二部分是两两比较合并
int k = 0, i = l, j = mid+1;
while(i <= mid && j <= r)
{
if (a[i] < a[j]) temp[k++] = a[i++];
else temp[k++] = a[j++];
}
//第三部分是拷贝区间内剩余元素
while (i <= mid)
temp[k++] = a[i++];
while(j <= r)
temp[k++] = a[j++];
//第四部分是拷贝到原数组
for(int i = l, j = 0; i <= r; i++, j++)
{
a[i] = temp[j];
}
}
int main()
{
int n;
while(cin >> n)
{
int q[n];
for (int i = 0; i < n; i++)
{
cin >> q[i];
}
merge_sort(q, 0, n-1);
for (int i = 0; i < n; i ++)
{
cout << q[i] << ' ';
}
}
}