思路:
贪心算法,每次找能移动的最小的数字往前移
代码:
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> p;
typedef long long ll;
#define isOp(x,y) ((x^y)<0)
#define m_p(a,b) make_pair(a,b)
#define p_b(a) push_back(a)
#define rp(i,n) for(int i=0;i<n;i++)
#define rpn(i,n) for(int i=1;i<=n;i++)
#define l_b(a,n,x) lower_bound(a,a+n,x)-a
#define u_b(a,n,x) upper_bound(a,a+n,x)-a
const int MAX_N=105;
bool op[MAX_N];//是否移动过
int arr[MAX_N];
int main(){
int q;
cin>>q;
rp(i,q){
int n;
cin>>n;
memset(arr,0,sizeof(arr));
memset(op,false,sizeof(op));
rp(j,n) cin>>arr[j];
rpn(j,n-1){
int pos=0;
while(arr[pos]!=j) pos++;
while(pos&&!op[pos-1]){
if(arr[pos-1]<arr[pos]) break;
swap(arr[pos],arr[pos-1]);
op[pos-1]=true;
pos--;
}
}
cout<<arr[0];
for(int i=1;i<n;i++) cout<<' '<<arr[i];
putchar('
');
}
return 0;
}