20165215 MySort的實現

MySort的實現

要求

  • 模擬實現Linux下Sort -t : -k 2的功能java

  • 要有僞代碼,產品代碼,測試代碼(注意測試用例的設計)數組

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]);
    }
}

運行結果

測試結果

相關文章
相關標籤/搜索