MySort

MySort

1、設計思路

肯定MySort的要求

根據需求可知MySort須要實現相似Linux下Sort -t : -k 2的功能,在網上查找了一下Sort命令的功能以及-t-k參數的做用,經查找後瞭解到命令參數的功能以下。html

  • Sort命令的做用爲將文本文件內容加以排序,sort可針對文本文件的內容,以行爲單位來排序。
  • -t參數用於指定排序時所用的欄位分隔字符。
  • -k參數用於指定按哪一個域的大小關係來進行排序
    本項目老師提供了參考代碼,提供了須要排序的數組以及整個程序的運行流程,而依據老師提供的代碼以及題目要求,咱們須要自行添加以冒號做爲分隔符,根據給定數據的第二個域的大小關係,對數組進行排序。

僞代碼

在此我描述的是修改並添加的排序以及輸出部分java

  • 一、排序:對須要排序的數組進行遍歷,並把其中的數據以" : "爲分隔符劃分開來,將全部數據的第二個域的數據保存在兩個存儲空間空間1和空間2。
  • 二、輸出排序後的順序:將升序排序後的空間1中的數據進行遍歷,按順序取得其中的數據,並根據該數據找到其在空間2中的位置,並以此位置找到須要排序的數組中的數據並進行輸出。

實現步驟

  • 一、使用for語句以及StringTokenizer類的實例將toSort數組中的每一個字符串以" : "爲分隔符劃分開來,並將第二個域的數據按順序存入字符串數組sort和temp,其中sort用於存放排序後的順序,temp用於存放排序前的順序。
  • 二、使用Arrays.sort(sort);對sort數組進行排序,獲得第二個域的從小到大排序後的順序。
  • 三、遍歷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]);
                    }
                }
            }
        }
}

運行結果如圖:
linux

2、代碼測試結果

我在虛擬機下進行了測試,並用args數組將參數-k指定的區域傳入程序,從而獲得了不一樣的排序結果,經測試所得輸出都符合預期。測試代碼以下:git

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

測試結果如圖:
數組

3、碼雲代碼

MySort
MySortTest測試

、參考資料

相關文章
相關標籤/搜索