我有一个字符串文件,我必须在O(nlog(n))或更短的时间内按字典顺序对它们进行排序。我知道排序算法并将它们应用于排序数字。但我不知道如何使用快速排序或任何其他排序算法对字符串进行排序。 请提供非内置方法的算法。
答案 0 :(得分:3)
对于字符串,常见建议可能是radix sort
它严格依赖于用于字符串形成的字母表,并且O(kN)
时间复杂度,其中n
是键的数量,k
是平均键长度。请注意,将其与O(n log n)
进行比较可能会造成混淆(其中n
表示输入元素的数量)
所以 - 较小的是k
,基数排序方法越好。这意味着,对于较小的基数,它将更有效。我只想引用扩展的解释(不需要改写它):
与其他排序相比,基数排序效率的主题 算法有点棘手,并且受到相当多的限制 误解。基数排序是否同样有效,更少 比最佳的基于比较的算法更有效或更有效 取决于所做假设的细节。基数排序效率 对于具有d个或更少位数的n个键,是O(d·n)。有时d是 作为常数呈现,这将使基数排序更好(对于 n)比最好的基于比较的排序足够大 算法,它们都是所需的O(n·log(n))个比较。 但是,一般来说d不能算是常数。特别是, 在所有键都是常见的(但有时是隐含的)假设下 不同,那么d必须至少是log(n)的顺序,这给出了 充其量(密集密集)时间复杂度O(n·log(n))。那 似乎使基数排序最符合效率最佳 基于比较的排序(如果密钥长得多,则会更糟糕) 的log(n))。
此外,此算法将使用一些额外的空间(值得空间复杂度O(k+n)
) - 因此,您应该意识到这一点(不像不使用额外空间的比较算法)
答案 1 :(得分:0)
您查看字母的数值(ascii值)并使用它们来执行数字顺序。
所以你从左到右看一个单词。如果字母匹配,你会看第二个等。