根据长度对字符串数组进行排序

cod*_*ior 3 arrays sorting string algorithm

问题是根据字符串的长度对字符串数组进行排序.

例如

input = {"cat", "star", "act", "gid", "arts", "dog", "rats"}  
output = {"cat", "act", "gid", "dog", "star", "arts", "rats"}
Run Code Online (Sandbox Code Playgroud)

我使用插入排序(使用字符串的长度而不是字符串本身)来完成它.我的问题:有没有更好的方法呢?

我想到的另一种选择是 - 使用a TreeMap来存储每个字符串及其长度作为值(假设字符串在给定数组中是唯一的).然后根据其值对其进行排序.运行时间将是O(nlogn)空间复杂性O(n).你认为这是一种更好的方法吗?

编辑:很抱歉没有提到这个 - 我想这样做而不使用Arrays.sort()或自定义比较器.

插入排序的代码示例:

public static String[] insertionSort(String[] arr) {
    for(int i=1;i<arr.length;i++) {
        int j = 0;
        for(;j<i;j++) {
            if(arr[j].length() > arr[j+1].length()) {
                String temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    return arr;
}
Run Code Online (Sandbox Code Playgroud)

Pra*_*ran 5

试试这个吧.

你的意见

String[] input = {"cat", "star", "act", "gid", "arts", "dog", "rats"};
Run Code Online (Sandbox Code Playgroud)

你的比较者

class SampleComparator implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {
        return new Integer(o1.length()).compareTo(o2.length());
   }
}
Run Code Online (Sandbox Code Playgroud)

你的排序

Collections.sort(in, new SampleComparator());
Run Code Online (Sandbox Code Playgroud)

你的输出

output = {"cat", "act", "gid", "dog", "star", "arts", "rats"}
Run Code Online (Sandbox Code Playgroud)