写的很给力,能有自己的想法是最重要的。很给力,多给你10个黑马币,作为额外的奖励。
- package test10;
- import java.util.Arrays;
- import java.util.Scanner;
- /*
- * 将一组数字、字母或符号进行排列,以得到不同的组合顺序。
- * 例如1 2 3这三个数的排列组合有:1 2 3、1 3 2、2 1 3、2 3 1、3 1 2、3 2 1。
- * 要求:用户输入一个整数(0到9)数组(数组长度大于等于3,小于10),
- * 那么请在控制台打印出该数组中所有成员的排列组合。
- * 详细代码+测试结果才可获得满分。
- */
- public class Test10 {
- static int[] arr ;//整数数组
- static int start = 0;//开始指针
- static int end = 0;//结束指针
-
- static Scanner in = new Scanner(System.in);
-
- public static void main(String[] args) {
- System.out.println("请问你要输入几个数(要求大于等于3而小于10)?");
- int len = in.nextInt();
- arr = new int[len]; //用用户输入的数创建数组
- System.out.println("请输入"+len+"个整数(0~9):");
- for (int i = 0; i < len; i++) {
- arr[i] = in.nextInt();
- }
- System.out.print("你输入的整数数组是:");
- printArray(arr);
- System.out.println("其全排列如下:");
- end = arr.length-1; //将结束指针指向最后一个数
- Arrays.sort(arr); //首先对输入数组进行排序
- arrange(arr);
- System.out.println();
- }
- /*
- * 排列函数
- * 编程思路:
- * 排列其实是一个递归排序,然后交换位置的一个过程
- */
- public static void arrange(int[] a) {
- Arrays.sort(a, start, a.length);
- for (int i = 0; i < a.length-start; i++) {
- /*
- * 当开始指针指向倒数第二个值时,不再递归,而是打印数组中的所有元素,然后交换最后两个元素后在打印,即调用sort函数
- */
- if (start == end-1) {
- sort(a,start,end);
- break;
- }
- start++;
- arrange(a);
- Arrays.sort(a,start,a.length);
- //当每次循环到最后一次时,不用再交换位置,因为这时候交换要交给外层循环
- if(i != end-start) {
- swap(a,start,start+i+1);
- }
- }
- start--;
- }
-
- /*
- * 该函数的功能就是当开始指针指向倒数第二个元素时,打印数组,然后交换最后两个元素后再打印
- */
- public static void sort(int[] a, int start, int end) {
- Arrays.sort(a,start,end+1);
- printArray(a);
- swap(a, start, end);
- printArray(a);
- }
-
- /*
- * 该函数用于交换数组中的两个元素
- */
- public static void swap(int[] a, int m, int n) {
- int temp = a[m];
- a[m] = a[n];
- a[n] = temp;
- }
-
- /*
- * 该函数用于打印数组中的所有元素
- */
- public static void printArray(int[] a) {
- for (int i = 0; i < a.length; i++) {
- System.out.print(arr[i]);
- }
- System.out.println();
- }
- }
复制代码 |