归并,求助
查看原帖
归并,求助
359111
kxbb楼主2022/8/8 22:21
#include<bits/stdc++.h>
using namespace std;
int const N=10010;
int a[N]={};
int x;
void hb(int a1,int a2,int b1,int b2)
{
	int b[N]={};
	int lena=a1;
	int lenb=b1;
	int len=1;
	while(1)
	{
		if(lena>a2)
		{
			for(int i=lenb;i<=b2;i++)
			{
				b[len]=a[i];
				len++;
			}
			break;
		}
		if(lenb>b2)
		{
			for(int i=lena;i<=a2;i++)
			{
				b[len]=a[i];
				len++;
			}
			break;
		}
		if(a[lena]<=a[lenb])
		{
			b[len]=a[lena];
			lena++;
			len++;
		}
		else
		{
			b[len]=a[lenb];
			lenb++;
			len++;
		}
	}
	for(int i=a1;i<=b2;i++)//a,b 合并 
	{
		a[i]=b[i-a1+1];
	}
	return;
}
void gb(int head,int tail)
{
	if(tail-head==0)	return;
	int mid=head+tail;
	mid=mid/2;
	gb(head,mid);
	gb(mid+1,tail);
	hb(head,mid,mid+1,tail);
}
int main()
{
	scanf("%d",&x);
	for(int i=1;i<=x;i++)
		scanf("%d",&a[i]);
	gb(1,x);
	for(int i=1;i<=x;i++)
		printf("%d ",a[i]);
	return 0;
}
2022/8/8 22:21
加载中...