课下作业 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]);
                }
            }
        }
    }
}

运行结果

码云链接

参考资料

linux sort 命令详解

猜你喜欢

转载自www.cnblogs.com/20175317zrw/p/10889411.html