课下作业 MySort
课下作业 MySort
作业要求
MySort:
注意:研究sort
的其他功能,要能改的动代码,需要答辩
模拟实现Linux下Sort -t : -k 2
的功能。
要有伪代码,产品代码,测试代码(注意测试用例的设计)
参考Sort
的实现。提交博客链接。
必须答辩才能得分
1 import java.util.*;
2
3 public class MySort1 {
4 public static void main(String [] args) {
5 String [] toSort = {"aaa:10:1:1",
6 "ccc:30:3:4",
7 "bbb:50:4:5",
8 "ddd:20:5:3",
9 "eee:40:2:20"};
10
11 System.out.println("Before sort:");
12 for (String str: toSort)
13 System.out.println(str);
14
15 Arrays.sort(toSort);
16
17 System.out.println("After sort:");
18 for( String str : toSort)
19 System.out.println(str);
20 }
21 }
具体步骤
首先需要了解Linux
中的sort
命令经过上网查找得知:
sort
将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
sort
的-t
选项和-k
选项
如果有一个文件的内容是这样:
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4
这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。
那么如果要以水果数量来排序,也就是以第二列来排序,利用sort
实现就要使用sort
提供的-t
选项,后面可以设定间隔符。
$ sort -n -k 2 -t : facebook.txt
指定了间隔符之后,就可以用-k来指定列数了,运行结果如下:
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3
我们使用冒号作为间隔符,并针对第二列来进行数值升序排序,结果很令人满意。
sort -n
选项
由于排序程序将数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面,这也是sort
的一贯作风。我们如果想改变这种现状,就要使用-n
选项,来告诉sort
要以数值来排序
伪代码
1、使用String
类提供的split()
方法,将toSort
数组以:
为分隔符存入数组part
2、新建数组a
,将part
数组的第二列数值给数组a
3、调用sort
方法对数组a
进行升序排序
4、输出排序后的结果
产品代码
import java.util.*;
public class MySort {
public static void main(String [] args) {
String [] toSort = {"aaa:10:1:1",
"ccc:30:3:4",
"bbb:50:4:5",
"ddd:20:5:3",
"eee:40:2:20"};
System.out.println("Before sort:");
for (String str: toSort) {
System.out.println(str);
}
int [] a = new int[toSort.length];
for (int i = 0; i < toSort.length; i++){
String [] part= toSort[i].split(":");
a[i] = Integer.parseInt(part[1]);
}
Arrays.sort(a);
System.out.println("After sort:");
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < toSort.length; j++) {
if (a[i] == Integer.parseInt((toSort[j].split(":"))[1])) {
System.out.println(toSort[j]);
}
}
}
}
}