高需求技能
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%的 自由开发人员 世界各地.

排序算法动画

下面的动画演示了如何使用不同的算法对来自不同起点的数据集进行有效排序.

使用方法: 新闻 “玩”,或选择  玩  按钮,用于对单个行/列进行动画.

尝试我!
所有玩插入选择泡沫壳牌合并快速快速3
随机
播放动画
播放动画
播放动画
播放动画
播放动画
播放动画
播放动画
播放动画
近排序
播放动画
播放动画
播放动画
播放动画
播放动画
播放动画
播放动画
播放动画
逆转
播放动画
播放动画
播放动画
播放动画
播放动画
播放动画
播放动画
播放动画
一些独特的
播放动画
播放动画
播放动画
播放动画
播放动画
播放动画
播放动画
播放动画
所有玩随机近排序逆转一些独特的
插入
播放动画
播放动画
播放动画
播放动画
选择
播放动画
播放动画
播放动画
播放动画
泡沫
播放动画
播放动画
播放动画
播放动画
壳牌
播放动画
播放动画
播放动画
播放动画
合并
播放动画
播放动画
播放动画
播放动画
播放动画
播放动画
播放动画
播放动画
快速
播放动画
播放动画
播放动画
播放动画
快速3
播放动画
播放动画
播放动画
播放动画

问题的大小:

关键

  • 黑色值排序.
  • 灰度值未排序.
  • 红色三角形标记算法位置.
  • 深灰色值表示当前间隔(shell、merge、quick).
  • 一对红色三角形标记了左右指针(快速).

讨论

这些页面显示了4种不同初始条件下的8种不同排序算法. 这些可视化的目的是:

  • 展示每个算法是如何操作的.
  • 证明没有最佳排序算法.
  • 展示每种算法的优缺点.
  • 证明了最坏情况下的渐近行为并不总是选择算法的决定性因素.
  • 显示初始条件(输入顺序和键分布)对性能的影响与算法选择一样大.

理想的排序算法应该具有以下属性:

  • 稳定:相等的键不会被重新排序.
  • 操作到位,需要0(1)额外空间.
  • 最坏情况下O(n·lg(n))个键比较.
  • 最坏情况是O(n)次交换.
  • 自适应:当数据几乎排序或只有很少的唯一键时,速度可达O(n).

没有一种算法具有所有这些属性, 排序算法的选择取决于应用.

Sorting is a vast topic; this site explores the topic of in-memory generic algorithms for arrays. 外部排序, 基数排序, 字符串排序, 而链表排序——所有精彩和有趣的话题——被故意省略,以限制讨论的范围.

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

参考文献。

Java中的算法,part 1-4,第3版 by 罗伯特Sedgewick. 艾迪生·韦斯利,2003.

快速排序是最优的 by 罗伯特Sedgewick 2002年1月,斯坦福大学Knuthfest的Jon Bentley.

双枢轴快速排序: Code 通过讨论.

泡沫排序与匈牙利(“Csángó”)民间舞蹈 YouTube视频,由罗马尼亚Tirgu Mures (Marosvásárhely)的Sapientia大学制作.

吉普赛民族舞蹈精选 YouTube视频,由罗马尼亚Tirgu Mures (Marosvásárhely)的Sapientia大学制作.

整理整理罗纳德·M. 在大卫·谢尔曼的协助下, 30分钟彩色有声电影, 动态图形项目, 多伦多大学, 1981. 摘自1983年《欧博体育app下载》第7期. 摩根·考夫曼出版社发行. 摘录.