发现百度校招极为喜欢考全排列,无论是笔试还是面试都经常问到。
昨天笔试又碰到全排列,不幸的是居然写错了。。。
回来后又仔细把当时的思路完善了一下,c++代码如下
#include "stdafx.h"
#include <iostream>
using namespace std;
#define MAXSIZE 5
void swap(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
void quanpailie(int *a,int n)
{
if(n==1) //递归到最后一个元素,结束,表示排列完毕
{
for(int i=0;i<MAXSIZE;i++)
cout<<*(a-i); //反向打印
cout<<endl;
return;
}
for(int i=0;i<n;i++)
{
if(i!=0)//i=0单独处理,不做交换,少调用函数,节省资源
{
swap(a,a+i);
quanpailie(a+1,n-1);
swap(a,a+i);
}
else
quanpailie(a+1,n-1);
}
}
void main()
{
int A[MAXSIZE]={0,1,2,3,4};
quanpailie(A,MAXSIZE);
system("pause");
}