zoukankan      html  css  js  c++  java
  • 20165215 MySort的实现

    MySort的实现

    要求

    • 模拟实现Linux下Sort -t : -k 2的功能

    • 要有伪代码,产品代码,测试代码(注意测试用例的设计)

    import java.util.*;
       public class MySort1 {
           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);
              Arrays.sort(toSort);
              System.out.println("After sort:");
              for( String str : toSort)
                  System.out.println(str);
          }
      }
    

    相关知识点

    sort

    • 工作原理:从每个比较单元的首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出
    • 相关命令行
      • -u:在输出中去除重复行
      • -r:将输出改为降序排列
      • -n:以数值来进行排序,避免出现10比2小的错误
      • -t -k n:当输入有多列时,表示输出将按第n列的数值进行排序
      • -f:忽略大小写进行比较
      • -b:从第一个可见字符开始比较
      • -C:检查文件是否已排好序,如果乱序则返回1
    • 因此对以上模板执行sort -t : -k 2,就是要实现对使用“:”分隔的第二列字符串按照从小到大的顺序重新排列的功能

    split

    • public String[] split(String regex):一个String类的数组以regex传入的分隔符为标准,对字符串进行分隔,使用时分隔符要放在双括号中

    代码

    • 伪代码
    将tosort数组以第二列数值大小为标准从小到大排列:
    新建数组a,长度与tosort数据长度相同
    调用split函数将tosort数组以:(冒号)为分隔符分成小字符串
    将每一个tosort元素的第二例数值存入数组a中
    调用Arrays类的sort函数对a进行排序
    使用嵌套循环输出排序后的结果
    
    • 产品代码
    package week12;
    import java.util.*;
    import java.lang.Integer;
    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 [] tmp = toSort[i].split(":");
                a[i] = Integer.parseInt(tmp[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]);
        }
    }
    

    运行结果

    测试结果

  • 相关阅读:
    C# 使用Enumerable.Range 打印数字
    C#中的范围类型(Range Type)
    C# 编程中的堆栈(Stack)和队列(Queue)
    C# 委托(delegate、Action、Func、predicate)
    使用线程以及对信号量 AutoResetEvent和ManualResetEvent的理解
    SQL Sever触发器的基本语法与作用
    C#控制台程序使用Log4net日志组件
    初级委托详解(C# 用委托有什么好处? 它起什么作用?)
    獲取串口數據,設置串口
    MVC 下 打包多个word到压缩包
  • 原文地址:https://www.cnblogs.com/fyss/p/9065173.html
Copyright © 2011-2022 走看看