排列算法

#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;
}
原文地址:https://www.cnblogs.com/hustcat/p/1504038.html