AcWing 787. 归并排序
Posted MangataTS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 787. 归并排序相关的知识,希望对你有一定的参考价值。
题目连接
https://www.acwing.com/problem/content/789/
思路
归并排序的核心就在于双指针处理的阶段,我们用两个指针分别表示左边区间的最小的位置和右边区间最小的位置,由于我们是先递归的,所以会直接递归到区间长度为1的,所以左边区间一定是排好序的,我们在归的过程中就对序列进行排序操作
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int a[N],temp[N];
int 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 i = l,j = mid+1,k = 0;
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(i = l,j = 0;i <= r; ++i,++j)
a[i] = temp[j];
int main()
scanf("%d", &n);
for(int i = 0;i < n; ++i)
scanf("%d",&a[i]);
merge_sort(a,0,n-1);
for(int i = 0; i < n; ++i)
printf("%d ",a[i]);
return 0;
以上是关于AcWing 787. 归并排序的主要内容,如果未能解决你的问题,请参考以下文章