字典序排序-求全排列(元素有重复)
思路:数组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 }
posted on 2017-05-30 21:34 heartzhizi 阅读(732) 评论(0) 编辑 收藏 举报