一个一维数组a[6]={1,2,3,4,5,6},输出这个数组的全排列。
思路:1、使用递归算法。
2、按照“位置选择数”的思路去考虑。如:第一个位置可以放1,也可以放2,......,可以放6.
下面代码是一个简单的实现:
#include<stdio.h>
int count=0,count1=0; //count用来计算排列数,count1用开控制屏幕输出格式
int main(int argc,char* argv[])
{
void qpl(int*,int,int);
int a[6]={1,2,3,4,5,6};
qpl(a,0,6);
printf(" %d \n",count);
return 0;
}
void qpl(int* p,int begin,int end)//begin指向要进行全排列部分的第一个数,end指向最后一个数的下一个位置
{
int i,j;
if(begin==(end-1))
{
for(j=0;j<end-1;j++)
printf("%d,",p[j]);
count++;
count1++;
printf("%d ",p[end-1]);
if(count1%8==0)
printf("\n");
}
else
{
for(i=begin;i<end;i++) //begin指向位置的数与后面的数一一做交换
{
int temp=*(p+begin);
*(p+begin)=*(p+i);
*(p+i)=temp; //以上三行交换begin指向位置的数和begin后面第i个位置的数
qpl(p,begin+1,end); //递归
temp=*(p+i); //一下三行把之前做的数据交换再换回来
*(p+i)=*(p+begin);
*(p+begin)=temp;
}
}
}