Как отсортировать строку с помощью Java

#java #sorting #bucket-sort

#java #сортировка #сортировка по корзинам

Вопрос:

Я пытаюсь отсортировать строку. Я отсортировал первые буквы, но последующие буквы не отсортированы. Мне также нужно дополнить слова, которые не совпадают с самым длинным словом с *, но я понятия не имею, как это сделать. Моя БАЗА — 27. Алфавиты и символ * для заполнения. Текущий результат — алгоритм apple australia jack olympic sell sleep

Для этой цели я использовал комбинацию сортировки по основанию и сортировки по корзинам. Я вызываю сортировку корзины в сортировке по основанию. Я думаю, что проблема заключается в реализации сортировки корзины.

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

алгоритм
apple
Австралия
джек
Олимпик
продает
сон

Комментарии:

1. Странно, что вы используете как сортировку по корзине, так и сортировку по основанию одновременно, поскольку по сути это одно и то же. Можете ли вы объяснить, почему вы это делаете? У вас есть какая-нибудь теория, почему это хорошая идея?

2. Не будет ли переполнения целого числа с вашим pow методом? Поскольку ваша база равна 27 и 27^7 даст целочисленное переполнение. Не могли бы вы описать, что d i означают параметры и в методе bucketSort ?

3. Плохое название. Перепишите, чтобы обобщить вашу конкретную техническую проблему.

4. Зачем вы реализовали свою собственную функцию сравнения / сортировки, если вы можете полагаться на стандартную библиотеку?

5. Прошу прощения за то, как я написал свой пост. Длина самого длинного слова представлена буквой «d», и я перебираю слово, используя букву «i». Я вызываю функцию сортировки по бускету внутри сортировки по основанию. Я решил не использовать функцию подсчета сортировки внутри radix sort. Я не был уверен, что вы могли бы переписать все, чтобы не нарушать правила форума. Я публикую здесь только время от времени, принося извинения за то, как я создал контент.

Ответ №1:

Почему вы не использовали существующие методы, такие как Collections.sort ?

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

Или, если вы хотите указать функцию сортировки лямбда:

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

Есть ли какая-то причина, по которой вам нужно дополнение? самым простым решением было бы найти максимальную длину всех строк и добавить недостающие пробелы.

Комментарии:

1. Вероятно, вопрос связан с домашним заданием или задачей обучения, а не с практической рабочей проблемой.

2. Я подумал то же самое, но OP ничего не говорит об ограничениях или конкретном методе, который необходимо использовать

3. Тогда я предлагаю вам опубликовать комментарий с просьбой разъяснить.