输出1234 四个数字的全排列
我的代码,算法新手请见谅,使用插入的方法,构造一个空数组,将数字1234依次插入上一次排列可插入的地方。
比如已经排至12,则3有三种选择,依次插入
#include<iostream> using namespace std; const int LENGTH=3; int p[LENGTH]; int n[LENGTH]; void insert(int num,int l,int pos){ int i; for(i=l-1;i>=pos;i--){ p[i+1]=p[i]; } p[pos]=num; } void dnum(int t,int l) { int i,pos; for(i=0;i<l;i++){ if(p[i]==t){ pos=i; break; } } for(i=pos;i<l;i++){ p[i]=p[i+1]; } } void permute(int l) { int i,j; if(l==LENGTH){ for(i=0;i<LENGTH;i++){ cout<<p[i]; } cout<<endl; }else{ for(i=0;i<=l;i++){ insert(n[l],l,i); l++; permute(l); dnum(n[l-1],l); l--; } } } int main(){ for(int i=0;i<LENGTH;i++){ n[i]=i+1; p[i]=0; } permute(0); system("pause"); }
更好更方便的算法
来自: http://bbs.csdn.net/topics/390223063 6楼
java代码如下,让数字依次和自己及其后面的数字交换位置即可
import java.util.Arrays; public class Permutation { public static void main(String[] args){ int[] array=new int[]{1, 2,3,4,5,6}; permute(array,0); } public static void permute(int a[],int s){ if(s==a.length){ System.out.println(Arrays.toString(a)); } else for(int i=s;i<a.length;++i){ swap(a,s,i); permute(a,s+1); swap(a,s,i); } } private static void swap(int[] a,int s,int i) { int t=a[s]; a[s]=a[i]; a[i]=t; } }