您的位置:首页 > 其它

输出全排列的算法

2013-04-20 02:52 281 查看
输出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;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: