//8591 计算next值
void get_next(SString T,int next[])
{
int i=1,j=0;next[1]=0;
while(i<=T[0])
{
if(j==0||T[i]==T[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}
//8592 KMP算法
void get_next(SString T,int next[]){
// 算法4.7
// 求模式串T的next函数值并存入数组next
// 请补全代码
int i=1,j=0;
next[1]=0;
while(i<=T[0])
{
if(j==0||T[i]==T[j])
next[i++]=j++;
else
j=next[j];
}
}
int Index_KMP(SString S,SString T,int pos){
// 算法4.6
// 利用模式串T的next函数求T在主串S中第pos个字符之后的位置
// KMP算法。请补全代码
int next[MAXSTRLEN+1];
get_next(T,next);
int i=pos,j=0;
while(i<=S[0]&&j<=T[0])
{
if(j==0||S[i]==T[j])
{
i++;
j++;
}
else
j=next[j];
}
if(j>=T[0])
return i-T[0];
else
return 0;
}
pos=Index_KMP(S,T,0); // 请填空
//18769 不完整的排序
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
void paixu(int m,int a[])
{
int i,j;
i=1,j=m;
while(i<j)
{
if(a[i]<0&&a[j]<0)
i++;
else if(a[i]<0&&a[j]>0)
{
i++;j--;
}
else if(a[i]>0&&a[j]<0)
{
swap(a[i],a[j]);//也可以用temp
i++;j--;
}
else if(a[i]>0&&a[j]>0)
j--;
}
}
int main()
{
int n;
cin>>n;
while(n--)
{
int m;
cin>>m;
int a[m+1];
for(int i=1;i<=m;i++)
cin>>a[i];
paixu(m,a);
for(int i=1;i<=m;i++)
cout<<a[i]<<" ";
cout<<endl;
}
return 0;
}