您的位置:首页 > 其它

字典序全排列

2017-10-26 22:25 155 查看
/**
* 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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: