zoukankan      html  css  js  c++  java
  • Java全排列递归算法

    Java全排列算法:

    第一遍循环:将list数组index==0的元素依次与数组的每个元素交换,从而保证index==0的位置先后出现n个不同元素之一,实现对index==0位置的遍历。

    第 i 遍循环:通过交换,  使index==i的元素,依次与index 为[ i, length-1] 的元素交换。使index==i 位置遍历 length-i 个不同值

    第k 次遍历,实质上都是让子列表[ k,  length - 1] 的index==0 的位置依次出现length - k 个不同的值,并在出现每个不同的值时,递归操作子列表[ k+1, length - 1]

    public class Permutation {
    
        public static void permulation(int[] list, int start, int length) {
            int i;
            if (start == length) {
                for (i = 0; i < length; i++)
                    System.out.print(list[i] + " ");
                System.out.println();
            } else {
                for (i = start; i < length; i++) {
                    swap(list, start, i);
                    permulation(list, start + 1, length);
                    swap(list, start, i);
                }
            }
        }
    
        public static void swap(int[] list, int start, int i) {
            int temp;
            temp = list[start];
            list[start] = list[i];
            list[i] = temp;
        }
    
        public static void main(String[] args) {
            int length = 3;
            int start = 0;
            int list[] = new int[length];
            for (int j = 0; j < length; j++)
                list[j] = j + 1;
            permulation(list, start, length);
        }
    
    }

    没有注释,其实因为我觉得注释也不太好写。以list[3]={1,2,3}为例。

    一、先是123,然后1与1自己对换,递归排列23,2与2自己对换,递归排列3,然后3与3对换,再递归时满足start==length,即越界,所以把123打印出来;

    然后上一步2与2自己对换后,2与3对换,(暂时是132),递归到2与2对换,再递归满足start==length,打印132;

    二、最先一步1与1自己对换后,1与2对换,(暂时是213),递归排列13,1与1自己对换,递归排列3. 3与3自己对换,然后满足If条件打印213:

    然后退一步,1与3对换,(暂时是231),递归到1与1自己对换,再递归满足打印条件,打印231;

    三、1与1、2对换后,1最后与3对换,(暂时是321),递归排列21,2与2对换,递归排列1.1与1自己对换,后来满足打印条件打印321. 2再与1对换,再递归到2与2自己对换,后来打印出312.

    写得比较抽象,但只能这样了。只可意会,不可言传~

  • 相关阅读:
    Hibernate4读取Clob数据
    JPA的Embeddable注解
    POJ 2112 Optimal Milking【网络流+二分+最短路】
    HP-UX查看版本
    这里的*号实际表示就是RAC中所有实例都使用
    [置顶] Asp.Net---css样式的使用方式
    使用Understand获取某个函数(方法)的静态度量指标
    机房收费系统的合作版
    C++内存管理学习笔记(5)
    【设计模式】Singleton模式C++实现
  • 原文地址:https://www.cnblogs.com/shuada/p/3464853.html
Copyright © 2011-2022 走看看