高需求技能
Toptal客户
反应.js开发人员职位节点.js开发人员职位Ruby on Rails开发人员职位Azure开发人员职位反应 Native开发者职位QA工程师职位去做工程师JavaScript开发人员职位Python开发人员职位Django开发人员职位PHP开发人员职位c#开发人员职位iOS开发者职位区块链开发人员职位Swift开发人员工作AWS开发人员职位Vue.js开发人员职位Java开发人员职位.NET开发人员职位Angular开发者职位Android开发者职位Magento开发人员职位Shopify开发人员职位Word新闻开发人员职位Laravel开发者职位长生不老药开发工作Docker开发人员职位Flutter开发者职位软件架构师职位Unity或Unity3D开发人员工作云工程师职位ASP.NET开发人员职位Kubernetes专家工作系统安全开发人员职位Kotlin开发者工作CSS开发人员职位计算机视觉开发人员职位人工智能工程师职位Drupal开发人员职位SQL开发人员职位Symfony开发者职位Ruby开发人员职位数据科学家的工作商业智能开发人员职位c++开发人员职位Ionic开发者工作GraphQL开发人员职位机器学习工程师职位Xamarin开发者职位Firebase开发人员职位反应.js开发人员职位节点.js开发人员职位Ruby on Rails开发人员职位Azure开发人员职位反应 Native开发者职位QA工程师职位去做工程师JavaScript开发人员职位Python开发人员职位Django开发人员职位PHP开发人员职位c#开发人员职位iOS开发者职位区块链开发人员职位Swift开发人员工作AWS开发人员职位Vue.js开发人员职位Java开发人员职位.NET开发人员职位Angular开发者职位Android开发者职位Magento开发人员职位Shopify开发人员职位Word新闻开发人员职位Laravel开发者职位长生不老药开发工作Docker开发人员职位Flutter开发者职位软件架构师职位Unity或Unity3D开发人员工作云工程师职位ASP.NET开发人员职位Kubernetes专家工作系统安全开发人员职位Kotlin开发者工作CSS开发人员职位计算机视觉开发人员职位人工智能工程师职位Drupal开发人员职位SQL开发人员职位Symfony开发者职位Ruby开发人员职位数据科学家的工作商业智能开发人员职位c++开发人员职位Ionic开发者工作GraphQL开发人员职位机器学习工程师职位Xamarin开发者职位Firebase开发人员职位

Toptal连接了前3%的 自由开发人员 世界各地.

快速排序

动画,代码,分析,并讨论了4个初始条件的快速排序.

使用方法: 新闻 “玩”,或选择  玩  button.

所有玩
播放动画
随机
播放动画
近排序
播放动画
逆转
播放动画
一些独特的

算法

_#选择透视_
交换一个[1,兰德(1,n))

_#双向分区_
k = 1
for i = 2:n, if a[i] 

讨论

如果仔细实现,快速排序是健壮的,并且开销很低. 当不需要稳定排序时, 快速排序是一种优秀的通用排序——尽管应该始终使用3路分区版本.

The 2-way partitioning code shown above is written for clarity rather than optimal performance; it exhibits poor locality, 和, 批判性的, 展品O (n2)时,只有几个唯一的键. 给出了一种更有效、鲁棒的双向划分方法 快速排序是最优的 罗伯特·塞奇威克和乔恩·本特利著. 当有许多值等于主节点时,健壮分区产生平衡递归, 为所有输入提供O(n·lg(n))时间和O(lg(n))空间的概率保证.

两个子排序都递归地执行, 在最坏的情况下,当递归不平衡时,快速排序需要O(n)额外的递归堆栈空间. 这种情况极不可能发生,但可以通过对 sub-array recursively first; the second sub-array sort is a tail recursive call, 哪些可以用迭代来代替. 通过这种优化,该算法在最坏的情况下使用O(lg(n))额外空间.

关键

  • 黑色值排序.
  • 灰度值未排序.
  • 深灰色值表示当前间隔.
  • 一对红色三角形标记k和i(见代码).

属性

  • 不稳定
  • O(lg(n))额外空间(见讨论)
  • O(n2)时间,但通常是O(n·lg(n))时间
  • 不适应

准备技术面试? 看看我们的采访指南吧.