`
Wesleydeng
  • 浏览: 34698 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

AllPermutation列举全排列

阅读更多

由于在排版系统中的需要今天写了一个可以列举出全排列的AllPermutation类(主要是按照字典序的顺序):

 

import java.util.Arrays;

public class AllPermutation
{
	int elements[];

	public AllPermutation(int[] elements)
	{
		super();
		this.elements = elements;
	}

	public int[] next()//according to the order of dictionary
	{

		int posA = -1;
		for (int i = elements.length - 1; i >= 1; i--)
		{
			if (elements[i] > elements[i - 1])
			{
				posA = i - 1;
				break;
			}
		}
		if (posA == -1)//is the biggest
		{
			System.out.println("no more permutaion!");
			return null;
		}

		int posB = posA + 1;//save another position
		for (int j = elements.length - 1; j >= posB; j--)
		{
			if (elements[j] > elements[posA] && elements[j] < elements[posB])
			{
				posB = j;
			}
		}
		swap(posA, posB);
		Arrays.sort(elements, posA + 1, elements.length);//ascending sort

		int[] next = new int[elements.length];
		System.arraycopy(elements, 0, next, 0, elements.length);//copy
		return next;
	}

	private void swap(int i, int j)
	{
		// TODO Auto-generated method stub
		int temp = elements[i];
		elements[i] = elements[j];
		elements[j] = temp;
	}
}
 

使用时:

 

		AllPermutation permutation =new AllPermutation(new int[]{1,2,3,4});
		int[] temp=null;
		while((temp=permutation.next())!=null)
		{
			for (int index = 0; index < temp.length; index++)
			{
				int j = temp[index];
				System.out.print(j+",");
			}
			System.out.println("");
		}

 

 

输出结果 写道
1,2,4,3,
1,3,2,4,
1,3,4,2,
1,4,2,3,
1,4,3,2,
2,1,3,4,
2,1,4,3,
2,3,1,4,
2,3,4,1,
2,4,1,3,
2,4,3,1,
3,1,2,4,
3,1,4,2,
3,2,1,4,
3,2,4,1,
3,4,1,2,
3,4,2,1,
4,1,2,3,
4,1,3,2,
4,2,1,3,
4,2,3,1,
4,3,1,2,
4,3,2,1,
no more permutaion!

0
3
分享到:
评论

相关推荐

    字典序全排列

    在实际应用中,字典序全排列可以用于各种需要按顺序列举所有可能情况的场景,如生物信息学中的基因排序、文本处理中的字符串比较等。了解并掌握这种算法对于提升编程能力、解决实际问题具有重要意义。同时,它也是对...

    全排列算法 全排列算法 (c#版)

    它涉及到将一个给定的有限序列的所有可能的元素排列情况进行列举。在C#编程语言中,实现全排列算法可以帮助开发者解决多种问题,例如组合优化、数据排序等。本篇文章将深入探讨全排列算法的原理、C#实现方法以及相关...

    智慧广场《分类列举》教学设计可用.pdf

    《智慧广场——分类列举》教学设计是一份针对小学数学课程的教学计划,主要涉及的数学概念是分类和列举,这是在解决组合问题时常用的方法。在实际教学过程中,教师通过创设情境,激发学生兴趣,引入做果盘的数学问题...

    创新技法之列举分析法

    ### 创新技法之列举分析法 #### 一、列举法概述 列举法是一种通过将研究对象的特点、缺点以及希望点等进行全面罗列,并在此基础上提出改进措施与创意设想的方法。这种方法有助于激发人们的创造力,从而产生新颖且...

    列举网自动发帖软件(易代码)

    总结起来,"列举网自动发帖软件(易代码)"是一个利用易语言编写的、针对列举网平台的自动化工具,能够从Excel文件中读取数据并自动填充到网站表单,实现批量发布。提供源码的特性为用户提供了进一步定制和学习的...

    重新修改青岛版六年级数学上册智慧广场一一列举副本PPT课件.pptx

    该资料是针对青岛版小学六年级数学上册“智慧广场”部分的一个教学课件,主要讲解了一一列举的解决问题的方法。这个方法常用于解决组合问题,即找出所有可能的组合方式,而不会遗漏或重复。以下是对这个知识点的详细...

    目录列举专家

    "目录列举专家"是一款专为列举指定目录下文件而设计的系统工具,它适用于需要清晰地展示文件系统结构,例如在FTP服务器上分享文件或创建目录列表的场景。这款工具的强大之处在于其能够进行递归搜索,这意味着它不仅...

    人教版课标初中数学九年级上《概率初步用列举法求概率》教学设计.doc

    这篇教学设计聚焦于人教版初中数学九年级上册的《概率初步》章节,特别是如何运用列举法来求解概率问题。教学目标旨在帮助学生掌握利用树形图和列表法来计算两步或三步实验中随机事件发生的概率,提升他们的合作交流...

    按条件列举窗口句柄

    本话题聚焦于“按条件列举窗口句柄”,这涉及到编程中如何通过特定条件查找并管理窗口资源。 首先,我们要理解如何使用条件来列举窗口句柄。条件通常包括: 1. **标题**:窗口的标题文本,比如一个程序的主标题或...

    青岛一年级数学下册列举法PPT课件.pptx

    这份青岛一年级数学下册的PPT课件涵盖了基础的数学概念和运算,旨在帮助学生掌握列举法、加减法、比较大小以及简单的推理能力。以下是课件中的主要知识点: 1. **列举法**:列举法是一种解决问题的方法,通过列举...

    列举系统的进程(VB)

    在VB(Visual Basic)编程中,列举操作系统的进程是一项常见的任务,这有助于监控系统状态、管理应用程序或进行系统分析。为了实现这一功能,VB程序员通常会利用Windows API(应用程序接口)来获取系统进程的信息。...

    08列举法(产品创意分析).pptx

    【列举法】是一种创新思维和产品创意分析的重要方法,它主要通过列举事物的特定属性,如优点、缺点、特征和希望点,来激发创新思维,推动产品或服务的改进和优化。列举法的核心在于系统性地罗列相关元素,通过批判性...

    java常用类的方法列举

    java常用类的方法列举,欢迎大家下载查看

    用列举法解决问题1.doc

    《用列举法解决问题》是小学五年级数学课程的一部分,旨在教授学生如何运用列举法解决实际问题,这是一种系统、有序地列出所有可能解的策略。在本节课中,教师通过两个实例来逐步引导学生掌握这种方法。 首先,教师...

    WinCE字体列举工具

    "WinCE字体列举工具"是一款专为WinCE系统设计的实用程序,其主要功能是列举并展示系统中已安装的所有可用字体。这款工具对于开发者和系统管理员来说极其有价值,因为他们需要了解系统支持的字体类型,以便在开发或...

    MFC类库列举 MFC类库列举 MFC类库列举 MFC类库列举

    ### MFC类库详解 MFC(Microsoft Foundation Classes)是微软提供的一套基于Windows API的类库,旨在简化Windows应用程序的开发过程。MFC通过封装底层API,为开发者提供了更高级、更直观的对象模型,使得应用程序的...

    《一年级下册智慧广场——用表格列举法解决问题》教学设计.pdf

    "一年级下册智慧广场——用表格列举法解决问题"教学设计 本教学设计旨在帮助一年级学生学习用表格列举法解决问题,巩固画图法,学习用表格列举法解决递增递减问题。在教学过程中,教师通过循序渐进的学习方式,先让...

    3-3-创新技法-列举法(PPT50页).ppt

    【创新技法-列举法】是创新思维中一种实用且直接的方法,主要用于激发创新设想和解决设计问题。列举法源于美国内布拉斯加大学教授克劳福特的属性列举法,通过系统化、程序化的思维方式,帮助克服思维定势,促进新...

    智慧广场列举教学设计参照.pdf

    【智慧广场列举教学设计】是针对青岛版小学数学六年级上册第八课时的教学内容,主要探讨了如何利用“一一列举”的策略解决简单的实际问题。本教学设计旨在培养学生的逻辑思维能力和解决问题的策略意识,同时增强他们...

Global site tag (gtag.js) - Google Analytics