归并排序在线求调!!!
查看原帖
归并排序在线求调!!!
978170
gsc15759915601楼主2023/10/17 20:51
#include<bits/stdc++.h>
using namespace std;
long long n,m[1001] = {0},x,y = 0,z[10001][1001];
char str;
long long merge(long long left,long long right){
	if(left==right){
		y++;
		z[y][1] = m[left];
		z[y][0] = 1;
		return y;
	}
	long long center = (left+right)/2,i1 = 1,i2 = 1,b1,b2,l1,l2;
	b1 = merge(left,center);
	b2 = merge(center+1,right);
	y++;
	l1 = z[b1][0];
	l2 = z[b2][0];
	z[y][0] = l1+l2;
	for(long long i = 1;i<=z[y][0];i++){
		if(i1==l1){
			for(long long j = i2;j<=l2;j++){
				z[y][i] = z[b2][j];
				i++;
			}
			break;
		}
		if(i2==l2){
			for(long long j = i1;j<=l1;j++){
				z[y][i] = z[b1][j];
				i++;
			}
			break;
		}
		if(z[b1][i1]<z[b2][i2]){
			z[y][i] = z[b1][i1];
			i1++;
			continue;
		}
		if(z[b1][i1]>=z[b2][i2]){
			z[y][i] = z[b2][i2];
			i2++;
			continue;
		}
	}
	return y;
}
int main(){
	cin>>n;
	for(long long i = 1;i<=n;i++){
		cin>>m[i];
	} 
	x = merge(1,n);
	for(long long i = 1;i<=z[x][0];i++){
		cout<<z[x][i]<<" ";
	}
	return 0;
}
2023/10/17 20:51
加载中...