我无法弄清楚使用桶排序对始终具有相同长度的字符串列表进行排序的最佳方法是什么。
算法如下所示:
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));
它说“线程中的异常”java.lang.StringIndexOutOfBoundsException:字符串索引超出范围: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));
}