输出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;
     
}
}

 

posted on 2013-04-20 02:52  Zthunder  阅读(262)  评论(0编辑  收藏  举报