#include <stdio.h>
int Swap(char *a,char *b)
{
char c;
c = *a;
*a = *b;
*b = c;
}
/*
* 递归思想实现选排,不可重复
*/
void Perm(char *list, int k, int m, int s)
{
//从list数组中k以后的子串中选排m个元素.s是总的选排个数
int i;
if(k == s || m == 0) {//已经选排完成,输出这个排列方式
for(i=0;i<s;i++)putchar(list[i]);
putchar('\n');
}
else
{
for (i=k; list[i]!='\0'; i++) {
Swap (&list[k], &list[i]);
Perm (list, k+1, m-1,s);//排列右子串
Swap (&list [k], &list [i]);
}
}
}
int main(int argc ,char *argv[])
{
char string[10] = "123";
Perm(string,0,2,2);
return 0;
}