这是一个简单的问题,我试图找出基数排序,我得到了这个代码,但是不能解决为什么我们需要W,看起来它使用的是给出的单词的长度但是,我我想知道这些话是不是固定了什么?
为什么我们需要扩展ascii大小?
为什么我们需要计算频率计数并计算累积量?
我们技术上不需要那两个for循环吗?
谢谢
public static void sort(String[] a, int W)
{
int N = a.length;
int R = 256; // extend ASCII alphabet size
String[] aux = new String[N];
for (int d = W-1; d >= 0; d--) {
// sort by key-indexed counting on dth character
// compute frequency counts
int[] count = new int[R+1];
for (int i = 0; i < N; i++)
count[a[i].charAt(d) + 1]++;
// compute cumulates
for (int r = 0; r < R; r++)
count[r+1] += count[r];
// move data
for (int i = 0; i < N; i++)
aux[count[a[i].charAt(d)]++] = a[i];
// copy back
for (int i = 0; i < N; i++)
a[i] = aux[i];
}
}
答案 0 :(得分:0)
但是不能解决为什么我们需要W,似乎它使用了它 对于给出的单词的长度但是,我想知道是否有这些单词 什么不固定?
如果字符串较长,则其余字符将不参与排序。如果字符串较短,那么我相信您会获得IndexOutOfBoundException
为什么我们需要扩展ascii大小?
正如Blorgbeard所说,这指的是&#34;扩展&#34; ASCII集。 ASCII未定义传递127.&#34;扩展&#34; ASCII包括0到255之间的字符。
为什么我们需要计算频率计数并计算累积量?
这是对d
个字符的字符串进行排序。实际上,前三个部分执行排序,最后一个部分复制部分排序的数组。
我们技术上不需要那两个for循环吗?
从技术上讲,你可以找到另一种方法来对d
字符上的字符串进行排序,但这似乎可以很好地完成这项工作。