思路:
1、从右边开始,找到一个满足右边大于自己的数,记为a
2、从这个数a开始向右找,找到一个最小的比a打的数,两者交换3、把从a开始向右的所有数用qsort从小到大排个序
#include<stdio.h>
#include<stdlib.h>
int num[1024];
int cmp(const void *a,const void *b)
{
return*((int *)a)-*((int *)b);
}
int main()
{
int m,n,k,i,index,mark,t;
scanf("%d",&m);
while(m--)
{
scanf("%d%d",&n,&k);
num[0]=1024;
for(i=1;i<=n;i++)
scanf("%d",&num[i]);
while(k--)
{
index=0;
mark=0;
for(i=n;i>0;i--)
if(num[i-1]<num[i])
{
index=i-1;
break;
}
if(index)
{
for(i=n;i>index;i--)
{
if(num[i]>num[index]&&num[i]<num[mark])
mark=i;
}
t=num[mark];
num[mark]=num[index];
num[index]=t;
}
qsort(num+index+1,n-index,sizeof(num[0]),cmp);
}
for(i=1;i<=n;i++)
printf("%d ",num[i]);
printf("\n");
}
return 0;
}