#include <iostream>
using namespace std;
int n = 0;
void swap(char *a ,char *b)
{
int m ;
m = *a;
*a = *b;
*b = m;
}
void perm(char list[],int k, int m )
{
int i;
if(k >m)
{
for(i = 0 ; i <= m ; i++)
{
cout<<"r"<<list[i];
}
cout<<"/n";
n++;
}
else
{
for(i = k ; i <=m;i++)
{
swap(&list[k],&list[i]);
perm(list,k+1,m);
swap(&list[k],&list[i]);
}
}
}
int main()
{
char list[] ="123";
perm(list,0,2);
cout<<"total:"<<n<<"/n";
return 0;
}
求原理!
@如是然:递规的用法
@天行健 自强不息:我看到了,主要是不明白你的解题思路
int partition(int* a,int l,int r)
{
int i=l-1,j=r,v=a[r]; http://www.it8008.com
while(1)
{
while(a[++i]<v||a[--j]>v) if(j<=i) break;
if(i>=j)
break;
swap(a[i],a[j]);
}
swap(a[i],a[r]);
return i;
}
void qsort(int* a,int l,int r)
{
if(l>=r) return;
int i = partition(a,l,r);
qsort(a,l,i-1);
qsort(a,i+1,r);
}
http://www.it8008.com/dev_language/c_related/cplus_language/2011-08-18/319.html