这是一个无重复字符序列的全排列,用的思想是递归,直接上代码,慢慢领会。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void swap(char* p1,char* p2)
{
char tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
void Permutation(char* pStr,char* pBegin)
{
if(*pBegin == '\0')
{
printf("%s\n",pStr);
}else{
for(char* pCh = pBegin; pCh != '\0'; pCh++)
{
swap(pBegin,pCh);
Permutation(pStr,pBegin+1);
swap(pBegin,pCh);
}
}
}
int main()
{
char cbuf[4] = "abc";
Permutation(cbuf,&cbuf[0]);
return 0;
}
大致的思路是依次将所有的字符放置在第一位(for循环和第一个swap),将其固定,递归排列从第二位开始的字符序列,完成之后,在用swap将第一次交换的字符换回。在本例子中,就是先将a放在第一位,排列bc;再将a与b互换,b做第一位,排列ac;再将a与c互换,排列ba。