Permutation( char a[], int start, int end)
{
int i;
char temp;
if (start == end)
{
for (i = 0 ; i <= end; i ++ )
printf( " %c " ,a[i]);
printf( " /n " );
}
else
{
for (i = start; i <= end; i ++ )
{
temp = a[start]; a[start] = a[i]; a[i] = temp;
Permutation(a, start + 1 , end);
temp = a[start]; a[start] = a[i]; a[i] = temp;
}
}
}
第二种:
void Permutation(char * pStr, char * pBegin)
{
if (!pStr || !pBegin)
return ;
// if pBegin points to the end of string,
// this round of permutation is finished,
// print the permuted string
if (*pBegin == '/0' )
{
printf("%s/n" , pStr);
}
// otherwise, permute string
else
{
for (char * pCh = pBegin; *pCh != '/0' ; ++ pCh)
{
// swap pCh and pBegin
char temp = *pCh;
*pCh = *pBegin;
*pBegin = temp;
Permutation(pStr, pBegin + 1);
// restore pCh and pBegin
PS:改变字符串顺序后必须还原回来!
temp = *pCh;
*pCh = *pBegin;
*pBegin = temp;
}
}
}