排列

//排列
#include<stdio.h>
#include<stdlib.h>

#define MAX_NUM 1024
int 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("
");	
	}
	return 0;
}

原文地址:https://www.cnblogs.com/javafly/p/6037190.html