zoukankan      html  css  js  c++  java
  • MySort

    MySort

    一、设计思路

    确定MySort的要求

    根据需求可知MySort需要实现类似Linux下Sort -t : -k 2的功能,在网上查找了一下Sort命令的功能以及-t-k参数的作用,经查找后了解到命令参数的功能如下。

    • Sort命令的作用为将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序。
    • -t参数用于指定排序时所用的栏位分隔字符。
    • -k参数用于指定按哪个域的大小关系来进行排序
      本项目老师提供了参考代码,提供了需要排序的数组以及整个程序的运行流程,而依据老师提供的代码以及题目要求,我们需要自行添加以冒号作为分隔符,根据给定数据的第二个域的大小关系,对数组进行排序。

    伪代码

    在此我描述的是修改并添加的排序以及输出部分

    • 1、排序:对需要排序的数组进行遍历,并把其中的数据以" : "为分隔符划分开来,将所有数据的第二个域的数据保存在两个存储空间空间1和空间2。
    • 2、输出排序后的顺序:将升序排序后的空间1中的数据进行遍历,按顺序取得其中的数据,并根据该数据找到其在空间2中的位置,并以此位置找到需要排序的数组中的数据并进行输出。

    实现步骤

    • 1、使用for语句以及StringTokenizer类的实例将toSort数组中的每个字符串以" : "为分隔符划分开来,并将第二个域的数据按顺序存入字符串数组sort和temp,其中sort用于存放排序后的顺序,temp用于存放排序前的顺序。
    • 2、使用Arrays.sort(sort);对sort数组进行排序,得到第二个域的从小到大排序后的顺序。
    • 3、遍历sort数组,取得其中的每个字符串,并将该字符串与temp中的字符串进行匹配,如有相同记录temp数组的下标,并输出该下标的toSort数组中的字符串,从而完成对排序后顺序的输出。
      产品代码如下:
    import java.util.*;
    public class MySort {
        public static void main(String[] args) {
            int i=0;
           
            StringTokenizer fenxi;
            String tem;
            String[] toSort = {"aaa:10:1:1",
                    "ccc:30:3:4",
                    "bbb:50:4:5",
                    "ddd:20:5:3",
                    "eee:40:2:20"};
            String sort[] = new String[toSort.length];
            String temp[] = new String[toSort.length];
            System.out.println("Before sort:");
            for (String str : toSort) {
                String con=null;
                System.out.println(str);
                fenxi=new StringTokenizer(str,":");
                fenxi.nextToken();
                con=fenxi.nextToken();
                sort[i]=con;
                temp[i]=con;
                i++;
            }
    
            Arrays.sort(sort);
            System.out.println("After sort:");
    
                for(String sor:sort){
                    for(int k=0;k<toSort.length;k++){
                        if(temp[k].equals(sor)){
                            System.out.println(toSort[k]);
                        }
                    }
                }
            }
    }
    

    运行结果如图:

    二、代码测试结果

    我在虚拟机下进行了测试,并用args数组将参数-k指定的区域传入程序,从而得到了不同的排序结果,经测试所得输出都符合预期。测试代码如下:

    import java.util.*;
    public class MySort {
        public static void main(String[] args) {
            int i=0;
            int mod = Integer.parseInt(args[3])-1;
            StringTokenizer fenxi;
            String tem;
            String[] toSort = {"aaa:10:1:1",
                    "ccc:30:3:4",
                    "bbb:50:4:5",
                    "ddd:20:5:3",
                    "eee:40:2:20"};
            String sort[] = new String[toSort.length];
            String temp[] = new String[toSort.length];
            System.out.println("Before sort:");
            for (String str : toSort) {
                String con=null;
                System.out.println(str);
                fenxi=new StringTokenizer(str,":");
                for(int p=0;p<mod;p++){
                    fenxi.nextToken();
                }
                con=fenxi.nextToken();
                sort[i]=con;
                temp[i]=con;
                i++;
            }
    
            Arrays.sort(sort);
            System.out.println("After sort:");
    
                for(String sor:sort){
                    for(int k=0;k<toSort.length;k++){
                        if(temp[k].equals(sor)){
                            System.out.println(toSort[k]);
                        }
                    }
                }
            }
    }
    

    测试结果如图:

    三、码云代码

    MySort
    MySortTest

    、参考资料

  • 相关阅读:
    python+opencv实现图像自适应阈值的均衡化
    ubuntu添加新的分辨率选项(干货)
    python+opencv检测图像清晰度
    python根据列表创建文件夹,拷贝指定文件
    牛客多校Round 4
    牛客多校Round 3
    HDU多校Round 2
    HDU多校Round 1
    牛客多校Round 2
    牛客多校Round 1
  • 原文地址:https://www.cnblogs.com/nameless-student/p/10886209.html
Copyright © 2011-2022 走看看