标签:string efi 分而治之 ring 小问题 int 中间 重复 void
顾名思义,分而治之(废话),他可以把一个复杂的问题简单化,从全部到局部,逐渐缩小问题规模,从而变得更高效。
void qsort(int l,int r)
{
if(l>=r) return;
ll i=l,j=r,mid=a[l+r>>1];//这里把随机弄成取中间数了,也可以去其他数
for(int h=l;h<=r;h++)
{
if(a[h]>mid) c[j--]=a[h];
if(a[h]<mid) c[i++]=a[h];
}
for(int p=i;p<=j;p++) c[p]=mid;
for(int h=l;h<=r;h++) a[h]=c[h];
qsort(l,i-1);
qsort(j+1,r);
}
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<sstream>
#include<queue>
#include<vector>
#define ll long long
#define dd double
#define N 2000001
using namespace std;
ll a[N],c[N],n;
void msort(ll l,ll r)
{
if(l>=r) return;
ll mid=l+r>>1,i=l,j=mid+1,tail=l;
msort(l,mid);
msort(mid+1,r);
while(i<=mid&&j<=r)
{
if(a[i]<=a[j]) c[tail++]=a[i++];
else c[tail++]=a[j++];
}
while(i<=mid) c[tail++]=a[i++];
while(j<=r) c[tail++]=a[j++];
for(int h=l;h<=r;h++) a[h]=c[h];
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
msort(1,n);
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
return 0;
}
标签:string efi 分而治之 ring 小问题 int 中间 重复 void
原文地址:https://www.cnblogs.com/TianMeng-hyl/p/12350670.html