全排列算法【java实现】
来源:互联网 发布:情定三生知夏喜欢谁 编辑:程序博客网 时间:2024/05/02 01:45
算法思想:
1.以一组排列数字排序之后作为起始数:譬如1,2,3,4 而不是2,1,3,4
2.从右向左查找一个数字(这个数字要比它前面的数字大)
如: 1234 你就会找到4
1243 你就会找到4 ......
3.从右向左查找一个第一个可交换数字(该数字要满足比第二步找到的数字小,却比第二步找到的数字的前一个数字大)
4.交换第二步找到的数字的前一个数字与第三步找到的数字;
5.将第二步找到的数字右边的数字排序;6.over,收工这样的几步就得到了下一个全排列数字~~~【希望有更好的想法的拿出来分享,一起探讨,非递归全排列算法】
package Demon;public class Main {/** * @param args */public static void main(String[] args) { //全排列算法实现 int[] arr = new int[]{1,2,3,4}; for(int i :arr) { System.out.print(i + " "); } System.out.println(); int totalnum = 1; while(NextNumber(arr,arr.length)) { for(int i :arr) { System.out.print(i + " "); } System.out.println(); totalnum ++; } System.out.println("Total Num: " + totalnum);}/** * 根据传入的数组获取下一个数组 * @param arr 传入数组 * @param n 数组长度 * @return 是否有下一个值 */private static Boolean NextNumber(int[] arr, int n){//数组最后一个元素位置int lastIndex = n-1;//从右向左确定第一个数字(前面的数字比它小)int firstIndex = lastIndex;for(;arr[firstIndex-1]>arr[firstIndex];firstIndex--){if(firstIndex == 1){//已经轮询完毕,此数已经是最大的那个数return false;}}//从右向左确定一个交换数(此数比arr[firstIndex]小且比arr[firstIndex-1]大)int swapIndex = lastIndex;for(;swapIndex > firstIndex;swapIndex--){if(arr[swapIndex] < arr[firstIndex] && arr[swapIndex] > arr[firstIndex-1]){break;}}//交换数字swap(arr,firstIndex-1,swapIndex);//将firstIndex右边的数字排序for(;firstIndex < lastIndex;firstIndex++,lastIndex--){if(arr[firstIndex] > arr[lastIndex]){swap(arr,firstIndex,lastIndex);}}return true;}/** * 交换数组中第i个元素与第j个元素的值 * @param arr 传入数组 * @param i 位置1 * @param j 位置2 */private static void swap(int[] arr,int i, int j){int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}}
- 全排列算法(Java实现)
- 全排列算法【java实现】
- 全排列算法java实现
- Java 实现全排列算法
- 全排列算法Java实现
- 全排列算法(java实现)
- 全排列生成算法java实现
- [算法学习]Java实现字符串全排列
- 归纳法-生成全排列算法Java实现
- 全排列算法(java实现)
- Java实现的字符串全排列算法
- Java实现全排列、组合算法
- 全排列算法的java实现
- 全排列递归算法java实现
- 全排列算法实现
- java 全排列算法
- java全排列算法
- 全排列算法-Java
- 透彻了解红黑树之三
- 是该写写东西了
- Android Bitmap内存限制
- 手把手教你制作一个Windows服务
- adb命令、adb shell与Linux各种命令(busybox)
- 全排列算法【java实现】
- oracle读书笔记--在linux系统上装oracle为什么要修改操作系统的核心参数
- 五个有用的过滤器
- Android 中的dip、dp、px、sp等单位的说明
- IIS 7管理API——Microsoft.Web.Administration介绍
- 透彻理解红黑树之四
- struts2 package元素配置
- 设计模式之 Simple Factory(其实该模式不是23中设计模式之一)
- sql语法大全