递归实现
#include<stdio.h>
#include<string.h>
void allrange(char* str,int l,int r);
void swap(char* x,char* y);
int isswap(char* str,int l,int i);
int main()
{
char str[10]="1223";
allrange(str,0,strlen(str)-1);
return 0;
}
void allrange(char* str,int l,int r)
{
int i;
if(l==r)
{
printf("%s\n",str);
return;
}
for(i=l;i<=r;i++)
{
if(isswap(str,l,i))
{
swap(&str[l],&str[i]);
allrange(str,l+1,r);
swap(&str[l],&str[i]);
}
}
}
void swap(char* x,char* y)
{
char t;
t=*x;
*x=*y;
*y=t;
}
int isswap(char* str,int l,int i)
{
int k;
for(k=l;k<i;k++)
if(str[k]==str[i])
return 0;
return 1;
}