全排列排序

public static void perm(int[] num, int i) { // i为第几层
     if (i < num.length) { // 小于总层就旋转,旋转间隔从0开始
          for (int j = i; j < num.length; j++) {
              int tmp = num[j];
              // 旋转该区段最右边的数字到最左边
              for (int k = j; k > i; k--) {
                  num[k] = num[k - 1];
              }
              num[i] = tmp;
              perm(num, i + 1);
 
              // 还原
              for (int k = i; k < j; k++) {
                  num[k] = num[k + 1];
              }
              num[j] = tmp;
          }
      } else { // 最后一层的时候打印
          // 显示此次排序
          for (int j = 0; j < num.length; j++) {
              System.out.print("    "+ num[j]);
          }
          System.out.println();
      }
  }

您可能还喜欢...