排列算法
#include <stdio.h>
#include <time.h>
void swap(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
/************************************************************************/
/* 算法:
R={r1,r2,,rn},Ri=R-{ri};
n=1,perm(R)=(r)
n>1,perm(R)=(r1)perm(R1) + (r2)perm(R2) + + (rn)perm(Rn)
*/
/************************************************************************/
void perm(int array[],int k,int m)
{
if (k==m)
{
for (int i=0;i<=m;i++)
{
printf("%d,",array[i]);
}
printf("\n");
}
else
{
/*将array[km]中的每个元素和array[k]交换,再对array[k+1m]的元素进行排列
*/
for (int i=k;i<=m;i++)
{
swap(&array[k],&array[i]);
perm(array,k+1,m);
swap(&array[k],&array[i]);
}
}
}
int main()
{
int array[10]={1,2,3,4,5,6,7};
clock_t start=clock();
perm(array,0,6);
clock_t end=clock();
printf("times:%fs\n",((double)(end-start))/CLOCKS_PER_SEC);
return 0;
}
#include <time.h>
void swap(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
/************************************************************************/
/* 算法:
R={r1,r2,,rn},Ri=R-{ri};
n=1,perm(R)=(r)
n>1,perm(R)=(r1)perm(R1) + (r2)perm(R2) + + (rn)perm(Rn)
*/
/************************************************************************/
void perm(int array[],int k,int m)
{
if (k==m)
{
for (int i=0;i<=m;i++)
{
printf("%d,",array[i]);
}
printf("\n");
}
else
{
/*将array[km]中的每个元素和array[k]交换,再对array[k+1m]的元素进行排列
*/
for (int i=k;i<=m;i++)
{
swap(&array[k],&array[i]);
perm(array,k+1,m);
swap(&array[k],&array[i]);
}
}
}
int main()
{
int array[10]={1,2,3,4,5,6,7};
clock_t start=clock();
perm(array,0,6);
clock_t end=clock();
printf("times:%fs\n",((double)(end-start))/CLOCKS_PER_SEC);
return 0;
}