快排由于TLE只有40,可是我写的归并为什么会出WA啊~~
查看原帖
快排由于TLE只有40,可是我写的归并为什么会出WA啊~~
835484
myclms楼主2023/8/8 10:34
#include<stdio.h>
#define MAXN 100005 
int a[MAXN];
int b[MAXN];
void merge(int h1,int r1,int h2,int r2){
	int len=r2-h1+1;
	int pb=0,p1=h1,p2=h2;
	while(p1<=r1 && p2<=r2){
		if(a[p1]<a[p2])		b[pb++]=a[p1++];
		else	b[pb++]=a[p2++];
	}
	while(p1<=r1)	b[pb++]=a[p1++];
	while(p2<=r2)	b[pb++]=a[p2++];
	pb=0;
	while(pb<len)	a[h1+pb]=b[pb++];
	return;
}
void msort(int left,int right){
	if(right<=left)		return;
	int mid=(left+right)/2;
	msort(left,mid);
	msort(mid+1,right);
	merge(left,mid,mid+1,right);
	return;
}
void print(int n){
	int i;
	for(i=0;i<n;i++){
		printf("%d",a[i]);
		if(i!=n-1)	printf(" ");
		else	printf("\n");
	}
}
int main()
{
	int n;
	scanf("%d",&n);
	int i;
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	msort(0,n-1);
	print(n);
	return 0;
 } 
2023/8/8 10:34
加载中...