课下作业 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.5apple:10:2.5pear:90:2.3orange:20:3.4
这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。
那么如果要以水果数量来排序,也就是以第二列来排序,利用sort
实现就要使用sort
提供的-t
选项,后面可以设定间隔符。
$ sort -n -k 2 -t : facebook.txt
指定了间隔符之后,就可以用-k来指定列数了,运行结果如下:
apple:10:2.5orange:20:3.4banana:30:5.5pear:90:2.3
我们使用冒号作为间隔符,并针对第二列来进行数值升序排序,结果很令人满意。
sort -n
选项
由于排序程序将数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面,这也是sort
的一贯作风。我们如果想改变这种现状,就要使用-n
选项,来告诉sort
要以数值来排序
伪代码
1、使用String
类提供的split()
方法,将toSort
数组以:
为分隔符存入数组part
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]); } } } }}