这个为什么跑不对啊?大佬求解答。。
#include <bits/stdc++.h>
using namespace std;
int a[300005],b[300005];
void c(int la,int ra,int ib){
for(int i=la;i<=ra;i++,ib++){
b[ib]=a[i];
}
}
void ab(int m){
for(int i=1;i<=m;i++){
a[i]=b[i];
}
}
int main(){
//6 5 7 8 4 3 1 2
int t;
cin>>t;
while(t--){
int m;
cin>>m;
for(int i=1;i<=m;i++){
cin>>a[i];
}
int add=2;//遍历每个分支
while(add<=m){
for(int i=1;i<=m;i+=add){
if(a[i]<=a[i+add/2]){
c(i,i+add-1,i);
}
else{
//i,mid mid+1,right
int mid=i+add/2-1;
int right=i+add-1;
c(i,mid,right);
c(mid+1,right,i);
}
for(int i=1;i<=m;i++)cout<<b[i];
cout<<"\n";
}
//for(int i=1;i<=m;i++)cout<<b[i];
ab(m);
cout<<"\n";
add*=2;
}
}
}
一个样例的输出
6 5 7 8 4 3 1 2
56000000
56780000
56783400
56783412
56783412
56781213
12131215