易网时代-编程资源站
Welcome
微信登录
首页
/
操作系统
/
Linux
/
用Java实现用序数法生成全排列
用java实现用序数法生成全排列:
import
java.io.*;
import
java.util.ArrayList;
class
Arrangement{
public
static
void
main(String args[]){
Arrangement arrangement =
null
;
int
num =
0
;
//要排序的个数
boolean
flag =
true
;
//标志位,如果用户输入的待排序个数不合法,该值一直为true
ArrayList<String> strs =
new
ArrayList<String>();
while
(flag){
try
{
num = Integer.parseInt(readDataFromConsole(
"请输入待排序的个数:"
));
flag =
false
;
}
catch
(Exception e){
System.out.println(
"请输入整数."
);
}
}
for
(
int
i =
1
; i <= num; i ++){
strs.add(readDataFromConsole(
"请输入第"
+ i +
"个字符: "
));
}
arrangement =
new
Arrangement(strs.toArray(
new
String[]{}));
System.out.println(
"排列后的数据为:"
);
arrangement.sort();
}
private
String[] str =
null
;
public
Arrangement(String[] s){
this
.str = s;
}
//从控制台读入数据
private
static
String readDataFromConsole(String prompt) {
BufferedReader br =
new
BufferedReader(
new
InputStreamReader(System.in));
String str =
null
;
try
{
System.out.print(prompt);
str = br.readLine();
}
catch
(IOException e) {
e.printStackTrace();
}
return
str;
}
private
void
sort(){
int
num=str.length;
int
[] n1 =
new
int
[num -
1
];
int
[] nss =
new
int
[num];
String[] s =
new
String[num];
boolean
flag =
false
;
int
x =
0
;
do
{
if
(x ==
0
){
//第一遍初始化
for
(
int
i =
0
;i < num -
1
;i ++){
n1[i] =
0
;
}
}
else
{
//生成序数
for
(
int
i =
0
;i < num -
1
;i ++){
if
(n1[num -
2
- i] < i +
1
){
n1[num -
2
- i] ++;
for
(
int
j=num-
1
-i;j<num-
1
;j++){
n1[j] =
0
;
}
break
;
}
}
}
for
(
int
i =
0
;i < num -
1
;i++){
if
(n1[i] == (num -
1
- i)){
flag =
false
;
}
else
{
flag =
true
;
break
;
}
}
for
(
int
i =
0
;i < num;i++){
//标记位赋初值
nss[i] =
0
;
}
for
(
int
i =
0
;i < num -
1
;i++){
//计算排列顺序并为排列后的赋值
int
hh =
0
, j =
0
;
//记录前边总共移动的位数
do
{
if
(nss[num -
1
- hh] ==
1
){
hh++;
continue
;
}
else
{
if
(j == n1[i]){
break
;
//每个字母距最右端未填入的位置
}
else
{
hh++;
j++;
}
}
}
while
(
true
);
hh = num -
1
- hh;
s[hh] = str[num-
1
-i];
nss[hh] =
1
;
}
for
(
int
i =
0
; i < num;i++){
//查找空缺位
if
(nss[i] ==
0
) {
s[i] = str[
0
];
break
;
}
}
System.out.print(++x +
" "
);
for
(
int
i =
0
;i < num -
1
;i++){
System.out.print(n1[i] +
""
);
}
System.out.print(
" "
);
for
(
int
i =
0
;i < num;i++){
System.out.print(s[i] +
""
);
}
System.out.println();
}
while
(flag);
}
}
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图