思路:数组a的元素分别是1,2,3,3;字典序排序就是找到下一个比1,2,3,3大的数组序列,即1,3,2,3;
步骤如下:1.首先使用Arrays.sort()对待排序数组进行排序;比如输入3213,排序后变成1233;从数组最后一个元素起(即i = 数组长度),将a[i]和a[i-1]比较,找到第一个a[i-1]<a[i]的i-1;
2,此时,a[i]前面可能还存在比a[i-1]大的元素,从数组末尾开始找到第一个比a[i-1]大的元素x,将x和a[i-1]交换,对Arrays.sort(a,i,a.length);具体代码如下
1 public class Solution {
2 public static void main(String args[]){
3 Scanner scan = new Scanner(System.in);
4 int n = scan.nextInt();
5 int[] a = new int[n];
6 int i,j = 0;
7 int temp = 0;
8 for(i = 0; i<n; i++)
9 a[i] = scan.nextInt();
10 Arrays.sort(a);
11 for(i = 0; i<a.length;i++){
12 System.out.print(a[i] + " ");
13 }
14 System.out.println();
15 while(true){
16 for(i = a.length-2; i>=0; i--){
17 if(a[i+1] >a[i]){
18 // i = i-1;
19 break;
20 }
21 }
22 if(i < 0)
23 break;
24
25 for(j = a.length -1; j> i; j--){
26 if(a[j] >a[i]){
27 int k = a[i];
28 a[i] = a[j];
29 a[j] = k;
30 break;
31 }
32 }
33 Arrays.sort(a,i+1,a.length);
34 for(i = 0; i<a.length;i++){
35 System.out.print(a[i] + " ");
36 }
37 System.out.println();
38 }
39
40 }
41 }