/**
* Created by lxw, liwei4939@126.com on 2017/10/26.
* 1,从右端开始扫描,若出现前一个比后一个小,记录前一个的元素下表index
*2,再找出index以后比该元素大的中的最小值的下标 minIndex
*3,交换arr[index],arr[minIndex]
*4,index以后的元素实现反转
* 结束条件:前一个都比后一个大
*/
import java.util.Arrays;
public class Dictionary_Sort {
int getMin(char[]input,int index){
char min=input[index];
int minIndex=index+1;
char result='z';
for(int i=index+1;i<input.length;i++){
if(input[i]>min&&input[i]<result){
result=input[i];
minIndex=i;
}
}
return minIndex;
}
void exchange(char []input,int index,int minIndex){
char temp=input[index];
input[index]=input[minIndex];
input[minIndex]=temp;
}
void reverse(char input[],int first,int end) {
while(first<end){
exchange(input,first,end);
first++;
end--;
}
}
void getDictionary(char c[]){
System.out.println(new String(c));
int i=0;
while(true){
i=c.length-1;
for(;i>0;i--){
if(c[i-1]<c[i])break; //找到前一个比后一个小的元素,结束本层循环
}
if(i==0)break; //结束外层循环的条件为前一个元素都比后一个大
int minIndex=getMin(c,i-1);
exchange(c,i-1,minIndex);
reverse(c,i,c.length-1);
System.out.println(new String(c));
}
}
public static void main(String []args){
String input="adfec";
char [] c=input.toCharArray();
Arrays.sort(c);
new Dictionary_Sort ().getDictionary(c);
}
}
字典序全排列
最新推荐文章于 2020-09-28 15:36:55 发布