对可变长度项目/算法进行排序

时间:2016-09-25 03:27:41

标签: arrays string algorithm sorting

我一直在研究我的算法中期项目,书中有这个问题,我遇到了关于可变长度项目的排序:

  • 您将获得一个字符串数组,其中不同的字符串可能具有不同的字符数,但所有字符串上的字符总数为n。演示如何在O(n)时间内对字符串进行排序。

我在网上找到了很多答案,但他们的解释并不是很清楚,所以如果你能花时间向我解释一下这个答案建议应该做些什么来排序O中的字符串,我真的很感激。 (n)时间:

  1. 按字段对字符串进行分组并按组排序
  2. 以最大长度开始i并向下移动到1,执行计数 排序第i个字符。确保只包含具有的组 ith性格。 如果组是原始数组中的后续子数组,则执行

1 个答案:

答案 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),因为在某些时候太短的项目不需要重新排序。