全排列算法java实现
来源:互联网 发布:pdas软件下载 编辑:程序博客网 时间:2024/05/01 23:41
/** * 全排列算法使用说明: * 1.集合元素按升序排序, 不要有重复的元素 * 2.在do{}while(next_permutation())中进行调用 * * 算法原理说明: * 1.从集合的最后一个元素进行比较, 查找最大的逆序序列, 并返回最大逆序列的起始位置, 如果起始位置等于0, 表示排列结束返回false * 2.查找逆序列开始前一个元素F在逆序中的后继数S的位置i, 即满足 a[i] < F < a[i+1] * 3.交换F和S * 4.将逆序列反序 * 5.返回true * * */public class Permutation<T extends Comparable<T>>{ public boolean next_permutation(T[] array){ int start=findReverseOrderStart(array); if(start == 0){ return false; } int precursor = start-1; // 逆序的前驱元素索引 int find=findSucceed(array,array[precursor], start); swap(array, precursor, find); // 交换位置 reverse(array, start, array.length-1); return true; } private int findReverseOrderStart(T[] array){ for (int i = array.length-1; i > 0; i--) { if(array[i].compareTo(array[i-1])>0){ return i; } } return 0; } /** * 从start开始查找最后一个指定值大的值的下标 * @param array * @param v * @param s * @return */ private int findSucceed(T[] a,T v, int s){ int find=0; for(int i=s;i<a.length;i++){ if(v.compareTo(a[i])<0){ find=i; } } return find; } private void swap(Object[] array, int a, int b){ Object temp=array[a]; array[a]=array[b]; array[b]=temp; } private void reverse(T[] array, int begin, int end){ while(begin < end){ swap(array, begin++, end--); } }@Test public void test(){ Permutation<Integer> perm=new Permutation<Integer>(); Integer[] letters={1,2,3,4,5}; int count=0; do{ for (int i : letters) { System.out.print(i); } System.out.println(); count++; }while(perm.next_permutation(letters)); System.out.println("permutation counts is " + count); } } //end class
0 0
- 全排列算法(Java实现)
- 全排列算法【java实现】
- 全排列算法java实现
- Java 实现全排列算法
- 全排列算法Java实现
- 全排列算法(java实现)
- 全排列生成算法java实现
- [算法学习]Java实现字符串全排列
- 归纳法-生成全排列算法Java实现
- 全排列算法(java实现)
- Java实现的字符串全排列算法
- Java实现全排列、组合算法
- 全排列算法的java实现
- 全排列递归算法java实现
- 全排列算法实现
- java 全排列算法
- java全排列算法
- 全排列算法-Java
- Cocos2d-x 3.1.1 lua-tests 开篇
- ios save image to album
- Could not change executable permissions on the application.
- A星寻路的lua实现
- 从头开始写项目Makefile(三):变量的使用
- 全排列算法java实现
- 车牌识别
- 通过代码看懂php内存分配机制,以及 unset 和 & 对内存的影响
- SQL Server 存储过程解析XML传参
- 42个激发灵感、漂亮的登陆页面设计
- SQL中使用WITH AS提高性能
- GDB调试多进程程序
- js打开新窗口并传递内容的问题
- 浅谈网页设计中的色彩理论