Я не могу понять, как лучше использовать Bucket Sort для сортировки списка строк, которые всегда будут одинаковой длины.
Алгоритм будет выглядеть так:
For the last character position down to the first:
For each word in the list:
Place the word into the appropriate bucket by current character
For each of the 26 buckets(arraylists)
Copy every word back to the list
Я пишу в Java, и я использую arraylist для основного списка, который хранит несортированные строки.Строки будут состоять из пяти символов каждая.
Это то, что я начал.Он просто резко останавливается во втором цикле for, потому что я не знаю, что делать дальше, или я правильно сделал первую часть.
ArrayList<String> count = new ArrayList<String>(26);
for (int i = wordlen; i > 0; i--) {
for (int j = 0; i < myList.size(); i++)
myList.get(j).charAt(i)
}
Заранее спасибо.
РЕДАКТИРОВАТЬ: Этоэто то, что у меня есть сейчас.Я знаю, что это не работает, потому что если бы было более одной строки, которая начиналась с одной и той же буквы, чем она взорвалась бы, но я думаю, что я в правильном направлении.Когда я запускаю его, даже со словами, которые я вставил, чтобы убедиться, что нет повторяющихся букв, он выходит из строя в первой строке набора: count.set(myList.get(j).charAt(i), myList.get(j));
Это говорит "Исключение в потоке" main "java.lang.StringIndexOutOfBoundsException: StringИндекс вне диапазона: 5 "
public void BucketSort(int wordlen) {
ArrayList<String> count = new ArrayList<String>(26);
//Make it so count has a size
for(int p = 0; p < 26; p++)
count.add(null);
for (int i = wordlen; i > 0; i--) { //for each letter
for (int j = 0; j < myList.size(); j++) //for each word
//Add the word to count based on the letter
count.add((int)myList.get(j).charAt(i) - 65, myList.get(j));
}
//Clear the main list so there aren't a bunch of unsorted words leftover
myList.clear();
//Add the words back in to the list based on their order in count
for (int m = 0; m < 26; m++)
myList.add(count.get(m));
}