全排列算法【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;}}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝怀孕三十天左右喝酒了怎么办 两个人都喝酒了意外怀孕怎么办 不知道自己怀孕了喝了很多酒怎么办 不知道自己怀孕了喝了一次酒怎么办 我儿子11岁了有多动症怎么办 面对老师的冷暴力家长该怎么办? 面对无德的老师家长该怎么办 如果你家长屏蔽老师老师该怎么办 小孩出完水痘后身上出现疱疹怎么办 脑子里兴奋的头疼怎么办 吃什么药 一个月宝宝异常兴奋不睡觉怎么办 四个月宝宝晚上兴奋不睡觉怎么办 20个月宝宝半夜惊醒哭闹怎么办 小孩吃了氨茶碱兴奋不睡觉怎么办 孩子在学校被同学撞鼻骨折怎么办 孩子在学校无意致使同学受伤怎么办 9个月的宝宝吃坏东西腹泻怎么办 8个月发烧到38度怎么办 1岁半宝宝鼻塞发烧38度6怎么办 八个月的宝宝发热38度怎么办 八个月宝宝发热在38度怎么办 8个月孩子发烧38度怎么办 6个月孩子发烧38度多怎么办 7个月孩子发烧38度怎么办 小明上课总是东张西望你该怎么办 初中二年级贪玩游戏说不听怎么办 孩子上课经常和别的同学说话怎么办 小孩五年级了上课坐不住怎么办 孩子老是纠结小事抓不住重点怎么办 没文化不懂教不了孩孑怎么办 孩孑学习不好老师不让上课怎么办 5个月婴儿睡得少怎么办 教育案例——幼儿爱打小报告怎么办 上班的时候同事老是爱插话怎么办 孕晚期右侧卧睡觉宝宝好动怎么办 乐扣玻璃碗盖子长霉怎么办 乐扣保鲜盒密封圈有异味怎么办 8个月的宝宝不吃饭怎么办 宝宝十一个月了不爱吃饭怎么办 一岁八个月宝宝不爱吃饭怎么办 14个月的宝宝不爱吃饭怎么办