#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. Тогда я предлагаю вам опубликовать комментарий с просьбой разъяснить.