如何输出一个数组各元素的所有排列?
因工作需要,需要排列算法,请各位老师帮忙。
最好不用STL等各类函数库、迭代器。

解决方案 »

  1.   

    那就重新贴一个, C语言的:#include  <stdio.h>  
    #define  n  4    /*求1-n的所有排列*/    
    int  a[n],d[n],e[n];    
    void  main()    
    {    
                   int  i,q,p,k,r,total;    
                   a[1]=1;    
                   for(i=2;i<=n;i++)    
                   {    
                                   a[i]=i;    
                                   d[i]=i;    
                                   e[i]=-1;    
                   }    
                   total=0;    
                   s2:    
                   q=0;    
                                   for(i=1;i<=n;i++)printf("%d  ",a[i]);    
                                   printf("\n");    
                                   total+=1;    
                                   for(k=n;k>=2;k--)    
                                   {    
                                                   d[k]+=e[k];    
                                                   p=d[k];    
                                                   if(p==k)    
                                                                   e[k]=-1;    
                                                   else  if(p==0)    
                                       {e[k]=1;q++;}    
                                       else  {    
                                                   p+=q;    
                                                                   r=a[p];    
                                                                   a[p]=a[p+1];    
                                                                   a[p+1]=r;    
                                                                   goto  s2;    
                                                   }    
                                   }    
                   printf("total=  %d\n",total);    
    }