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个初始条件的快速排序.
讨论
如果仔细实现,快速排序是健壮的,并且开销很低. 当不需要稳定排序时, 快速排序是一种优秀的通用排序——尽管应该始终使用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))时间
- 不适应