字典序排序求全排列
import java.util.Arrays;
/**
* @author 毛毛虫
* @create 2020-09-24 10:40
*/
public class dictionaryOrder {
void swap(int arr[],int a,int b){
int temp = 0;
temp = arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
//全排列
void Prim(int arr[],int n){
int num =1;
int a=0;
int b=0;
for (int i=n;i>0;i--){//计算有多少种情况,就循环多少次
num*=i;
}
while(num-->0){
for (int i=0;i<n;i++){//打印情况
System.out.print(arr[i]);
}
System.out.println();
for (int i=n-1;i>0;i--){//从右往左,找出第一个左边小于右边的数,设置为arr[a]
if (arr[i-1]<arr[i]){
a=i-1;
break;
}
}
for (int j=n-1;j>a;j--){//从右往左,找出第一个大于arr[a]的数,设为arr[b]
if (arr[j]>arr[a]){
b=j;
break;
}
}
swap(arr,a,b); //交换arr[a],arr[b]
Arrays.sort(arr,a+1,n); //将arr[a]后面的数据,由小到大排序
}
}
public static void main(String[] args) {
int arr[]={2,1,3,4};
Arrays.sort(arr);//首先得将要排序的数组从小到大就行排序
dictionaryOrder dictionaryOrder = new dictionaryOrder();
dictionaryOrder.Prim(arr,4);
}
}