有如下一些数据:
1-2-3-4-5
2-3-2
2-4-4-2
1-6
保存在一个文本文档中(ANSI编码格式)。要求排序成如下结果:
1-6
1-2-3-4-5
2-4-4-2
2-3-2
即以每一行的最后一个元素进行排序,如果相同再以之前一个排序。都是降序。。
有兴趣的可以试试。
package com.watersoft.file;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Sort {
private int lineCount;
private int numberCount;
private String path;
private int[][] matrix;
/**
* *
*
* @param args
* contains the path of a text file which include the data being
* sorted
*/
public static void main(String[] args) {
if (args.length < 1) {
System.err.println("Specific a file please!");
return;
}
System.out.println(">>> Information: sort start ..\n");
Sort s = new Sort();
s.setPath(args[0]);
s.doSort();
s.display();
System.out.println("\n>>> Information: sort end ..");
}
/** * do sort: initialize, parse, then sort. */
public void doSort() {
init();
parse();
for (int index = 0; index < this.lineCount - 1; index++)
for (int innerIndex = 0; innerIndex < this.lineCount - 1; innerIndex++)
sort(innerIndex, this.numberCount - 1);
}
/**
* * sort the given data according to the given row index and column index *
*
* @param rowIndex
* current row *
* @param colIndex
* current column
*/
private void sort(int rowIndex, int colIndex) {
int aInt = this.matrix[rowIndex][colIndex];
int bInt = this.matrix[rowIndex + 1][colIndex];
int temp = 0;
if (aInt < bInt) { /* * swap two rows */
for (int index = 0; index < this.numberCount; index++) {
temp = this.matrix[rowIndex][index];
this.matrix[rowIndex][index] = this.matrix[rowIndex + 1][index];
this.matrix[rowIndex + 1][index] = temp;
}
} else if (aInt == bInt) { /* * compare previous elements of two rows */
colIndex--;
sort(rowIndex, colIndex);
}
}
/**
* * read file to make sure the dimension of matrix *
*
* @return boolean value, true if successfully done, else false
*/
private boolean init() {
try {
FileReader fr;
fr = new FileReader(this.path);
BufferedReader br = new BufferedReader(fr);
String tempString;
int lc = 0;
int nc = 0;
while ((tempString = br.readLine()) != null) {
lc++;
nc = (nc < tempString.split("-").length) ? tempString
.split("-").length : nc;
}
this.lineCount = lc;
this.numberCount = nc;
} catch (FileNotFoundException e) {
System.err.println("Error: cannot find file:[" + this.path + "]");
return false;
} catch (IOException e) {
System.err.println("Error: cannot read file..");
return false;
}
return true;
}
private boolean parse() { /* * initialize matrix */
this.matrix = new int[this.lineCount][this.numberCount];
for (int index = 0; index < this.lineCount; index++)
for (int innerIndex = 0; innerIndex < this.numberCount; innerIndex++)
this.matrix[index][innerIndex] = Integer.MAX_VALUE;
try {
FileReader fr;
fr = new FileReader(this.path);
BufferedReader br = new BufferedReader(fr);
String tempString;
String[] tempArray;
int lc = 0;
int baseIndex = 0;
while ((tempString = br.readLine()) != null) {
tempArray = tempString.split("-");
baseIndex = this.numberCount - tempArray.length;
for (int index = baseIndex; index < this.numberCount; index++)
this.matrix[lc][index] = Integer.parseInt(tempArray[index
- baseIndex]);
lc++;
}
} catch (FileNotFoundException e) {
System.err.println("Error: cannot find file:[" + this.path + "]");
return false;
} catch (IOException e) {
System.err.println("Error: cannot read file..");
return false;
}
return true;
}
/** * display sorted result */
public void display() {
for (int index = 0; index < this.lineCount; index++) {
for (int innerIndex = 0; innerIndex < this.numberCount; innerIndex++) {
if (this.matrix[index][innerIndex] != Integer.MAX_VALUE)
if (innerIndex + 1 != this.numberCount)
System.out.print(this.matrix[index][innerIndex] + "-");
else
System.out.print(this.matrix[index][innerIndex]);
}
System.out.println();
}
}
public void setPath(String path) {
this.path = path;
}
}
分享到:
相关推荐
Java经典算法 ,各种排序算法 老掉牙 河內塔 費式數列 巴斯卡三角形 三色棋 老鼠走迷官(一) 老鼠走迷官(二) 騎士走棋盤 八個皇后 八枚銀幣 生命遊戲 字串核對 雙色、三色河內塔 背包問題(Knapsack...
梁友栋算法,又称为Lyndon-Wheeler分解或Lyndon分解,是计算机科学和图论领域中的一个重要算法,尤其在字符串处理和图形学中有着广泛的应用。该算法由Charles Louis Lyndon和Joseph Zyskind在1962年提出,主要用于...
“字串核对”,可能是指字符串匹配算法,用于检测一个字符串是否出现在另一个字符串中;“超长整数运算”、“长PI”、“阿姆斯壮数”、“最大访客数”、“中序式转后序式(前序式)”、“后序式的运算”、“洗扑克牌...
7. 排序算法,包括选择排序、插入排序、气泡排序、快速排序、合并排序、基数排序等,是基本的数据处理技巧。 8. 搜寻算法,有循序搜寻、二分搜寻、插补搜寻、费氏搜寻等,用于在数据集中查找特定元素。 9. 矩阵和...
本资源摘要信息涵盖了C语言经典算法大全,包括河内塔、费式数列、巴斯卡三角形、三色棋、老鼠走迷宫、骑士走棋盘、八个皇后、八枚银币、生命游戏、字串核对、双色、三色河内塔、背包问题、蒙地卡罗法求PI、...
经典常用算法解析与实现,通过Java C语言分别实现各种算法,图文并茂,描述很详细! 主要包括如下算法,很全面!...快速排序法(一) 快速排序法(二) 快速排序法(三) 合并排序法 基数排序等
12. **排序算法**:包括选择排序、插入排序、冒泡排序、希尔排序、快速排序、归并排序、堆排序等,各有优缺点,适用于不同场景。 13. **搜寻算法**:如顺序搜索、二分搜索、插补搜索、费氏搜索等,帮助在数据结构中...
3. **排序算法** 包括选择排序、插入排序、冒泡排序、希尔排序、快速排序、归并排序、堆排序等。这些都是计算机科学的基础,用于优化数据处理效率,各种算法有着不同的时间复杂度和适用场景。 4. **搜索算法** 如...
15. 各种排序算法:包括选择排序、插入排序、冒泡排序、希尔排序、谢尔排序、快速排序、归并排序、基数排序等,它们各有优缺点,适用于不同场景和数据特性。 16. 搜索算法:如顺序搜索、二分搜索、插补搜索、...
从键盘输入若干个字符串(5~15个),每一串的长度不超过...编程要求:Enter键结束一个字串的输入,连续两个Enter键结束整个字串的输入。人机对话输入数据,界面友好,容错,输出格式清晰,适当注释,算法解释精炼和清晰
"SeePinyinSort"可能是项目或库的名字,它可能包含了具体的实现代码,包括汉字到拼音的转换函数、拼音排序算法等。通过阅读和理解这些代码,开发者可以学习到如何在C++和QT环境下有效地处理中文字符串的拼音排序问题...
- **定义**:巴斯卡三角形是一个数字三角阵列,每一行的第一个和最后一个数字都是1,其他位置的数字等于其上方两数之和。 - **应用场景**:广泛应用于概率论、组合数学等领域,特别是在计算组合数方面非常有用。 ##...
问题描述了僧侣如何将一系列不同大小的盘子从一个塔座移动到另一个塔座,并且在移动过程中遵循特定的规则:每次只能移动一个盘子,任何时候都不能将大盘子放在小盘子上面。解法中使用了递归的策略,对于n个盘子,...
快速排序法(一) 快速排序法(二) 快速排序法(三) 合并排序法 基数排序法 搜寻 循序搜寻法(使用卫兵) 二分搜寻法(搜寻原则的代表) 插补搜寻法 费氏搜寻法 矩阵 稀疏矩阵 多维矩阵转一维矩阵...
各种经典算法(总有一款你喜欢),河內塔 費式數列 巴斯卡三角形 三色棋 老鼠走迷官(一) 老鼠走迷官(二) 騎士走棋盤 八個皇后 八枚銀幣 生命遊戲 字串核對 雙色、三色河內塔 背包問題(Knapsack ...