用C语言求全排列怎么求呀,在网上找的代码看不懂555

有没有人会写逻辑简单点的,好理解的,谢谢
感觉全排列好难。。。

1个数字全排列 1 种
2个数字全排列,分别把 1 2 排前面,剩下的1个数字跟后面
3个数字全排列,分别把 1 2 3 排前面,每次剩下2个数字,对它全排列。
n个数字全排列,分别把1 2 3 ... n 放在前面,然后每个后面对 n - 1 全排列。
因此就可以递归了

#include<stdio.h>
#include<string.h>
void swap(char *a,char *b)
{
    char temp;
    temp = *a;
    *a = *b;
    *b = temp;  
}

void  Allarrange(char *str,int k,int len)
{
    int i;
    if(k==len)
    {
        static int s_i=1;
        printf("第%d种排列为:\t%s\n",s_i++,str);
    }
    else
    {
        for(i=k;i<=len;i++)
        {
            swap(str+i,str+k);
            Allarrange(str,k+1,len);
            swap(str+i,str+k);
        }
    }
}

int main()
{
    char str[10];
    printf("请输入排列的字符串:"); 
    gets(str);
    Allarrange(str,0,strlen(str)-1);
    return 0;
}