递归实现全排列
2017-07-27 19:28
274 查看
大概思路:对后i个数进行排列,如前n-i个数位置已经固定,对后i个数进行递归排序。
排序规则是:将第n-i个数的位置和第n-i+1~n-1的数位置分别进行调换并输出,在输出完成后要调换回来。
C++代码:
图如下:
java代码:
排序规则是:将第n-i个数的位置和第n-i+1~n-1的数位置分别进行调换并输出,在输出完成后要调换回来。
C++代码:
#include <iostream> using namespace std; int n; void Paixu(int a[],int m){ if(m>=n){ for(int i=0; i<n;i++) cout<<a[i]<<" "; cout<<endl; } else{ for(int i =m; i<n;i++){ swap(a[i],a[m]); Paixu(a,m+1); swap(a[i],a[m]); } } } int main() { cin>>n; int *a=new int ; for(int i=0; i<n; i++){ a[i]=i+1; } Paixu(a,0); return 0; }
图如下:
java代码:
package digui; import java.util.Scanner; public class Digui3 { public static void main(String[] args) { Scanner reader = new Scanner(System.in); int n = reader.nextInt(); int a[]=new int ; for(int i=0; i<n;i++){ a[i]=i+1; } Paixu(a,0); } private static void Paixu(int[] a, int m) { // TODO Auto-generated method stub if(m>=a.length){ for(int i =0; i<a.length;i++){ System.out.print(a[i]+" "); } System.out.println(); } else{ for(int i = m; i<a.length; i++){ swap(a, m, i); Paixu(a, m+1); swap(a, m, i); } } } private static void swap(int[] a, int m, int i) { // TODO Auto-generated method stub int temp=a[m]; a[m]=a[i]; a[i]=temp; } }运行效果如下:
相关文章推荐
- 元素全排列递归实现(C++)
- 用DFS输出n个数的全排列(递归实现)
- 简单全排列C递归实现 没考虑重复情况
- Ackerman函数的递归、全排列的递归实现、整数划分的递归、二分搜索的递归、合并排序的递归、.快速排序
- 递归实现全排列
- 递归实现全排列
- 数字全排列的递归和非递归实现(C/C++)
- 也论全排列的递归实现
- C#:通过递归和非递归算法实现按顺序输出的全排列
- 递归实现集合全排列
- 求模(非递归)全排列算法——Javascript实现
- 全排列的递归实现以及利用STL实现全排列
- 数组全排列的递归方法实现
- C--全排列的实现(递归方法) 傻子也能看懂的
- 全排列的递归与非递归实现
- 全排列各种实现(非递归、递归)
- 数列全排列(递归实现)
- 递归实现n个元素全排列(2)
- 【算法】递归实现全排列
- 全排列的递归与非递归实现