排列

来源:互联网 发布:kindle 软件下载 编辑:程序博客网 时间:2024/05/17 07:25
//排列#include<stdio.h>#include<stdlib.h>#define MAX_NUM 1024int an[MAX_NUM+10];int MyCompare(const void *e1,const void *e2){return *((int *)e1)-*((int *)e2);}int main(){int M;int n,k,i,j;scanf("%d",&M);for(int m=0;m<M;m++){scanf("%d%d",&n,&k);for(i=1;i<=n;i++)scanf("%d",&an[i]);an[0]=100000;for(i=0;i<k;i++){for(j=n;j>=1&&an[j-1]>an[j];j--);if(j>=1){int nMinLarger=an[j];int nMinIdx=j;for(int kk=j;kk<=n;kk++){if(nMinLarger>an[kk]&&an[kk]>an[j-1]){nMinLarger=an[kk];nMinIdx=kk;}}an[nMinIdx]=an[j-1];an[j-1]=nMinLarger;qsort(an+j,n-j+1,sizeof(int),MyCompare);}else{for(j=1;j<=n;j++)an[j]=j;}}for(j=1;j<=n;j++)printf("%d ",an[j]);printf("\n");}return 0;}

0 0