zoukankan      html  css  js  c++  java
  • 算法笔记之全排列的非递归求解

    在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述java算法笔记之全排列的非递归求解,更多Java专业知识,广州疯狂java培训为你讲解;

    这个也是比较常见的方法。

      先交换,再把后面的数组逆置就行了

      递归的方法点下面:

      算法笔记之 全排列算法 一 递归求解

      [java]

      private static void swap(int[] array, int i, int j) {

      int tmp = array[i];

      array[i] = array[j];

      array[j] = tmp;

      }

      //排列. total 表示输出arr之后的 total个排列

      static void permutation(int[] arr,int total)

      {

      // int total = 1;

      // for(int i=2; i<= size; i++){

      // total *= i;

      // }

      // print_arr(arr);

      for(int i=1; i<total; i++){

      int k = arr.length -1;

      //找到要进行替换的元素下标。

      //即从后开始遍历,找到底一个非增的元素,和后面某个刚好大于它的元素替换

      while( k>0 && arr[k] < arr[--k]);

      int min = Integer.MAX_VALUE;

      int minIndex = 0;

      //找到刚好比 替换到前面大的元素

      for(int j=arr.length-1; j>= k+1; j--){

      if(arr[j] > arr[k] && min > arr[j]){

      min = arr[j];

      minIndex = j;

      }

      }

      //与找到的元素 进行交换

      swap(arr, k, minIndex);

      //做数组的 逆置

      for(int m=0; m < (arr.length-k-1)/2; m++)

      swap(arr, k+1 + m, arr.length-1-m);

      print_arr(arr);

      }

      }

      public static void print_arr(int[] arr){

      for(int i=0; i<arr.length; i++)

      System.out.print(arr[i]);

      System.out.println();

      }

      public static void main(String[] args) {

      int arr[] = {1,2,3,4,5};

      print_arr(arr);

      permutation(arr,23);

      }

    疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。没有工作经验的学员,在疯狂java,通过大量全真经典企业级项目进行集中培训,课上讲师讲解和课下项目练习课上课下双管齐下,学员通过数月培训都可获得1-2年的工作经验,进而在同类的求职者中脱颖而出。现在企业要求员工“上岗即上手”,专业技能则成为了一个企业对应试要求最为重要的标准,他们对于求职者的技能操作提出了非常明确的要求——你有技术则用你,没有则pass掉。这点在IT行业表现得更加明显,这时疯狂java学员实践能力强的优势就显现出来了。疯狂java培训,让你感受Java的魅力,激发你对于编程的热爱,让你在半年的时间内掌握8-10万的代码量,掌握Java核心技术,迅速成为技能型的现代化高端人才,迅速获得高薪就业!

  • 相关阅读:
    2019年4月18日 查询功能 2
    bzoj3601
    bzoj2693
    bzoj2440
    bzoj3529
    bzoj2820
    BZOJ2813
    BZOJ4515
    AtCoder Grand Contest 001 题解
    BZOJ2757
  • 原文地址:https://www.cnblogs.com/gojava/p/3261797.html
Copyright © 2011-2022 走看看