资源简介
给出了字典排序求取全排列的算法实现,JAVA
代码片段和文件信息
/*
* To change this license header choose License Headers in Project Properties.
* To change this template file choose Tools | Templates
* and open the template in the editor.
*/
import java.util.Scanner;
/**
* 功能: 输入将要求取全排列的数字的个数(不超过10的正整数)并打印全排列。
*
* @author 曲文杰 S314060042
*/
public class DictionarySort {
public static void getAllSort(int n)//字典排序求全排列算法实现
{
int current_table[];
current_table = new int[11];
int i = 0;
for (i = 1; i <= n; i++) {//生成初始序列
current_table[i] = i;
}
printCurrentTable(current_table n);//打印起始序列
boolean flag = true;//存在后边的数大于前边的数的标志位
int temp = 0;
int i_max = 1;
int h_max = 1;
while (flag) {
flag = false;//复位flag
for (i = 1; i < n; i++) {//求 i_max
if (current_table[i] < current_table[i + 1]) {
i_max = i + 1;
flag = true;
}
}
if (flag) {
for (i = i_max - 1; i <= n; i++) {//求h_max
if (current_table[i_max - 1] < current_table[i]) {
h_max = i;
}
}
temp = current_table[i_max - 1];//将i_max - 1 与 h_max 互换
current_table[i_max - 1] = current_table[h_max];
current_table[h_max] = temp;
//将i_max 之后的数进行逆序
for (i = i_max; i <= ((i_max + n) / 2); i++) {
temp = current_table[i];
current_table[i] = current_table[n + i_max - i];
current_table[n + i_max - i] = temp;
}
printCurrentTable(current_table n);//打印
}
}
}
public static void printCurrentTable(int currentTable[] int n) {//打印数组中的序列
StringBuilder s = new StringBuilder();
for (int i = 1; i <= n; i++) {
s.append(currentTable[i]);
}
System.out.println(s);
}
public static void main(String[] args) {//main
System.out.println(“请输入想要求解的全排序的数字: 0-9“);
Scanner input = new Scanner(System.in);
int n = input.nextInt();//读入
System.out.println(“你想要求解的数字 “ + n + “ 的全排列如下: “);
getAllSort(n);
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2669 2014-09-05 09:07 DictionarySort.java
文件 21760 2014-09-04 19:52 曲文杰—运行结果.png
- 上一篇:commons-csv-1.1
- 下一篇:Android 躲避球
评论
共有 条评论