从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。 输入整数n,输出1  2......n的所有排列方案 如果n=1,输出结果后结束,否则,交换第i个与第1个元素的位置,然后输出第2个到第n个元素的全排列(i>=1&&i<=n) 

非字典序

#include <stdio.h>
#define N 100
int a[N];//0号元素不用
int count=0;//输出的排列个数
int n=4;//实际元素个数
void print(){//输出
	int i;
  for(i=1;i<=n;i++){
  	printf("3d",a[i]);
  count++;
  printf("\n");
}
void swap(int i,int j){//交换
	int t;
  t=a[i];
  a[i]=a[j];
  a[j]=t;
}
void permutation(int start,int end){//输出数组中start,end区间所有元素的全排列
	int i;
  if(start==end){//只有一个元素时输出全排列
  	print();
    return ;
  }
  for(i=start;i<=end;i++){//i从start开始,不是1
  	swap(start,i);
    permutation(start+1,end);
    swap(start,i);
  }
}
int main(){
	int i;
  for(i=1;i<=n;i++){
  	a[i]=i;
    permutation(1,n);
    printf("%d",count);
    return 0;
}