我正在尝试对字符串进行排序。我已经对前几个字母进行了排序,但随后的字母没有排序。我还需要用*填充最长的单词,但我不知道该怎么做。我的BASE是27。填充的字母和*字符。当前结果是
苹果
算法
澳大利亚
插口
奥林匹克

睡觉

为此,我使用了基数排序和存储桶排序的组合。我称基数排序中的存储桶排序。我认为问题出在BUcket排序实现内。

 private static void bucketSort(List<String> S, int d, int i) {
    while(!S.isEmpty()) {
        int DIVISOR = pow(BASE, i-1);
        int MODULO = pow(BASE, i);
        String s = S.remove(S.first());
        int index = (s.length() <= d)? 0: s.charAt(i) - ('a'-1);
        System.out.println(index);
        int value = s.charAt(index);
        int index2 = (value / DIVISOR) % MODULO;

        buckets[index2].insertLast(s);
    }

    for (List<String> bucket : buckets) {
        while (!bucket.isEmpty()) {
            S.insertLast(bucket.remove(bucket.first()));
        }
    }
}
private static int pow(int base, int i) {
    int pow = 1;
    while (i > 0) {
        pow *= base;
        i--;
    }
    return pow;
}


算法
苹果
澳大利亚
插口
奥林匹克

睡觉

最佳答案

为什么不使用现有的方法,例如Collections.sort

List<String> S = Arrays.asList("apple", "algorithm", "australia", "jack", "olympic", "sell", "sleep");
Collections.sort(S);


或者,如果您要指定lambda排序功能:

S.sort((p1, p2) -> p1.compareTo(p2));


有什么理由要填充吗?最简单的解决方案是找到所有字符串的最大长度并添加缺少的空格。

09-16 08:19
查看更多