输出全排列的算法
2013-04-20 02:52
281 查看
输出1234 四个数字的全排列
我的代码,算法新手请见谅,使用插入的方法,构造一个空数组,将数字1234依次插入上一次排列可插入的地方。
比如已经排至12,则3有三种选择,依次插入
更好更方便的算法
来自: http://bbs.csdn.net/topics/390223063 6楼
java代码如下,让数字依次和自己及其后面的数字交换位置即可
我的代码,算法新手请见谅,使用插入的方法,构造一个空数组,将数字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; } }
相关文章推荐
- 排列数(输出0~9的全排列)-蓝桥杯算法提高
- 普通递归算法:输出n个数的所有全排列
- 算法 - 输出一个字符串的全排列(C++)
- 排列组合算法(微软笔试题:输出1到n的全排列)
- 算法思维(递归)训练:输出字符串字符的全排列
- 蓝桥杯 算法提高VIP 数组输出(Java解题)
- 全排列的算法(八)——序数法
- 算法:输出给定字符串的全部连续子串
- 关于输入一组数并输出所有全排列思考~
- 算法题--字符排列(全排列)
- 【每天算法1】:用java 语言实现,输入一个数,就相应地输出的几维数组
- 全排列生成算法(二)
- 全排列生成算法
- 递归解决输出一个字符串的全排列问题(缺陷:没有考虑字符串中字符重复的问题)
- java经典算法_014输入三个整数x,y,z,请把这三个数由小到大输出。
- 程序员面试题精选100题(38)-输出1到最大的N位数[算法]
- 算法竞赛入门经典: 第三章 数组和字符串 3.1逆序输出
- 输出所有可能的全排列
- 关于二叉树前序输入且输出结构的算法实现
- 简单探讨全排列的生成算法