You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于IEnumerable实现的快速排序时间复杂度存疑:谁的观点正确?

关于基于IEnumerable实现的快速排序复杂度的疑问

我对一篇讨论快速排序实现的内容里,基于IEnumerable实现版本的时间复杂度存疑。Stuart Marks认为它的时间复杂度是O(N²logN),但我完全搞不懂他下面这段表述:

在我看来——再次声明,我并非C#或.NET专家——这会导致一些看似简单的调用(例如通过ints.First()选择基准元素)的开销远超预期。在第一层,它自然是O(1)操作,但考虑树中深处右侧的某个分区,要获取该分区的第一个元素,必须遍历整个源数据,这是O(N)操作。由于上层分区是延迟加载的,它们必须被重新计算,需要O(lgN)次比较。因此选择基准元素的操作复杂度为O(N lgN),相当于一次完整排序的开销。

我有两个核心疑问:

  • 为什么ints.First()会变成O(N)操作?我一直以为它始终是O(1)的啊。
  • 为什么IEnumerable树里的上层分区需要重新计算?IEnumerable.Where不是会返回一个新的IEnumerable实例吗?

在我的理解里,这个算法的时间复杂度应该还是O(N logN),只是空间复杂度是O(N logN),和原地排序的O(N)不一样。

想请教一下,到底Stuart Marks和我的观点谁是正确的?

内容的提问来源于stack exchange,提问作者Coder-Man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:51:30