我一直在研究我的算法中期项目,书中有这个问题,我遇到了关于可变长度项目的排序:
我在网上找到了很多答案,但他们的解释并不是很清楚,所以如果你能花时间向我解释一下这个答案建议应该做些什么来排序O中的字符串,我真的很感激。 (n)时间:
答案 0 :(得分:1)
这是您要搜索的内容:https://en.wikipedia.org/wiki/Radix_sort
简单来说:
您开始按字符串的第一个数字排序。 这可以在一次通过O(N)中完成,因为您不需要将每个元素与其他元素进行比较。您只需要记住数组中每组值的起始位置和结束位置。例如,以' g'开头的所有字符串位于阵列位置35到500.当你发现一个字符串陈述' g'你把它添加到这个组的末尾。
在下一阶段,您将对每个群体执行相同的操作。
如您所见,它需要O(M * N),其中M是字符串长度,N是字符串数。 在你的情况下,你的N是所有字符串的总长度,所以它是O(N)。
虽然你有不同长度的字符串,你仍然可以保留O(N),因为在某些时候太短的项目不需要重新排序。