在归并排序中用队列
作者:
goodboy_8
,
2024-08-06 11:49:12
,
所有人可见
,
阅读 7
#include<iostream>
#include<cmath>
#include<queue>
using namespace std;
const int N = 1e5 + 100;
int a[N],t[N],n;
void merge_sort(int a[],int l,int r)
{
if(l==r)
{
return;
}
int mid=(l+r)/2;
merge_sort(a,l,mid);
merge_sort(a,mid+1,r);
int tot=1;
queue<int> q1,q2;
for(int i=l;i<=mid;i++)
{
q1.push(a[i]);
}
for(int i=mid+1;i<=r;i++)
{
q2.push(a[i]);
}
while(!q1.empty()||!q2.empty())
{
if(q1.front()>q2.front()&&q1.size()&&q2.size())
{
t[tot++]=q2.front();
q2.pop();
}
else if((q1.front() <= q2.front() )&&q1.size()&&q2.size())
{
t[tot++]=q1.front();
q1.pop();
}
else if(q2.empty())
{
t[tot++]=q1.front();
q1.pop();
}
else
{
t[tot++]=q2.front();
q2.pop();
}
}
for(int i=l,j=1;i<=r;i++,j++)
{
a[i]=t[j];
}
}
int main()
{
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;
}