归并排序,未排序就输出,求找bug
  • 板块学术版
  • 楼主御坂10026号
  • 当前回复2
  • 已保存回复2
  • 发布时间2020/8/25 23:09
  • 上次更新2023/11/6 19:21:49
查看原帖
归并排序,未排序就输出,求找bug
337410
御坂10026号楼主2020/8/25 23:09
#include<cstdio>
using namespace std;
int n,arr[100005];
void merge(int l,int r){
	int m=(l+r)/2;
	int i,j,k=0;
	int left[100005],right[100005];
	for(i=l;i<=m;i++)
		left[i-l+1]=arr[i];
	for(j=m+1;j<=r;j++)
		right[j-m]=arr[j];
	i=l,r=m+1;
	while(i<=m&&j<=r){
		k++;
		if(left[i]<right[j]){
			arr[k]=left[i];
			i++;
		}
		else{
			arr[k]=right[j];
			j++;
		}
	}
	if(i<m){
		k++;
		for(;i<=m;i++,k++)
			arr[k]=left[i];
	}
	if(j<r){
		k++;
		for(;j<=r;j++,k++)
			arr[k]=right[j];
	}
	return;
}
void merge_sort(int l,int r){
	if(l==r)
		return;
	int m=(l+r)/2;
	merge_sort(l,m);
	merge_sort(m+1,r);
	merge(l,r);
}
int main(){
	scanf("%d",&n);
	int i;
	for(i=1;i<=n;i++)
		scanf("%d",&arr[i]);
	merge_sort(1,n);
	for(i=1;i<=n;i++)
		printf("%d ",arr[i]);
	return 0;
}
2020/8/25 23:09
加载中...