为啥要对字符串进行排序 O(n log n)? [复制]

Posted

技术标签:

【中文标题】为啥要对字符串进行排序 O(n log n)? [复制]【英文标题】:Why is sorting a string O(n log n)? [duplicate]为什么要对字符串进行排序 O(n log n)? [复制] 【发布时间】:2011-05-24 22:49:34 【问题描述】:

可能重复:Plain English explanation of Big O

在一个编程难题的答案中,它说对字符串进行排序需要 O(n log n) 时间。 那是怎么得出的?

谁有大 O 资源的良好参考链接。

谢谢

【问题讨论】:

“排序字符串”是什么意思?您的意思是对字符串列表进行排序吗? 或者可能对字符串中的字符进行排序.. 它对字符串中的字符进行排序。我知道大 O 是什么,我特别不知道为什么对字符串中的字符进行排序是 n log n。 【参考方案1】:

为什么要对字符串排序 O(n log n)?

对字符串中的字符进行排序不一定是 O(n log n)。

O(n log n) 是comparison sort 的最佳 值。这也是许多语言默认排序实现的复杂性。但是,肯定有可能做得比这更糟。对字符串中的字符进行排序的复杂性取决于您选择解决此任务的具体算法。 在某些情况下,通过使用不是比较排序的排序算法也可以做得比 O(n log n) 更好。例如,如果您知道您有一个最多包含 127 个不同字符的 ASCII 字符串,您可以使用 counting sort,即 O(n)。对于所有字符都在 Basic Multilingual Plane 中的 Unicode 字符串,计数排序也是可行的。

【讨论】:

【参考方案2】:

可以使用搜索引擎找到 Big O 的定义和一些示例,例如这里:

http://en.wikipedia.org/wiki/Big_O_notation

可以在此处找到基于比较元素的排序算法的说明,以及对所需比较次数下限的说明:

http://en.wikipedia.org/wiki/Comparison_sort

【讨论】:

以上是关于为啥要对字符串进行排序 O(n log n)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

检查两个排序的字符串在 O(log n) 时间内是不是相等

在o(N log N)时间内使用恒定的空间复杂度对链表进行排序

c_cpp 使用常量空间复杂度在O(n log n)时间内对链表进行排序。

几种排序算法

在 n 个元素的数组中,首先对 n-(root)n 个元素进行排序,我们要对数组进行排序

为啥以下算法(循环排序?!)的时间复杂度是 O(n)?