String 如何按字典顺序对字符串排序?
我有一个字符串文件,我必须以O(nlog(n))或更短的时间按字典顺序对它们进行排序。我知道排序算法,并将其应用于数字排序。但我不知道如何使用快速排序或任何其他排序算法对字符串进行排序。String 如何按字典顺序对字符串排序?,string,algorithm,sorting,String,Algorithm,Sorting,我有一个字符串文件,我必须以O(nlog(n))或更短的时间按字典顺序对它们进行排序。我知道排序算法,并将其应用于数字排序。但我不知道如何使用快速排序或任何其他排序算法对字符串进行排序。 请提供非内置方法的算法。您查看字母的数值(ascii值),并使用它们进行数字排序 从左到右看一个词。如果字母匹配,请查看第二个等。对于字符串,常见的建议可能是 它严格取决于用于字符串形成的字母表,是O(kN)时间复杂度,其中n是键数,k是平均键长。请注意,将其与O(n log n)进行比较可能会令人困惑(其中n
请提供非内置方法的算法。您查看字母的数值(ascii值),并使用它们进行数字排序
从左到右看一个词。如果字母匹配,请查看第二个等。对于字符串,常见的建议可能是 它严格取决于用于字符串形成的字母表,是
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))。那个
似乎使基数排序最多与最佳排序同样有效
基于比较的排序(如果关键字比
对数(n))
此外,该算法将使用一些额外的空间(具有相当的空间复杂度
O(k+n)
)-因此,您应该知道这一点(不像不使用额外空间的比较算法)您必须使用什么语言?php中的Simplesort
函数将按字母顺序对字符串进行排序。任何语言!我只是想知道算法或方法。如果你必须创建自己的函数。比如说,你可以给字母指定一个数字。在某些语言中,有一些标准函数可以执行此操作。然后字符串将成为一组数字。对于分配了大于9的数字的字母表,您可以将26
分配给Z
。1 > 26? 不因此A将出现在数组中早于Z。然后字符串将成为一组数字。字母表被分配了一个大于9的数字怎么办?我不明白你的问题。字母表是如何分配数字的?来自流行语言的排序算法通常声明它们使用ASCII等。感谢您的精彩描述。我希望这是我的解决方案。让我试试/