zoukankan      html  css  js  c++  java
  • 分而治之,归并排序的动画演示

    归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

    作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:

    • 自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法);
    • 自下而上的迭代;

    和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是 O(nlogn) 的时间复杂度。代价是需要额外的内存空间。

    算法步骤

    1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;

    2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置;

    3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;

    4. 重复步骤 3 直到某一指针达到序列尾;

    5. 将另一序列剩下的所有元素直接复制到合并序列尾。

    来源:https://github.com/hustcc/JS-Sorting-Algorithm

    算法演示

    排序动画过程解释

    1. 首先,将数字分割成两片区域

    2. 将数字分割成两片区域

    3. 。。。。。。

    4. 直到每片区域只有一个元素

    5. 分割完成

    6. 接下来,将分割的每片区域进行合并组合

    7. 合并时,按照数字的升序移动,使得合并后的数字在组内按升序排列

    8. 当合并包含多个数字的组时,比较开头的数字,移动其中较小的数字

    9. 比如在动画中,比较开头的 4 和 3

    10. 其中 4 大于 3, 因此移动 3

    11. 按照同样的逻辑去比较该列剩余的头数

    12. 4 小于 7 ,所以移动 4

    13. 。。。。。。

    14. 递归的重复组的合并操作,直到所有数字都在一个组中。

    15. 完成 归并排序

    代码实现

    为了更好的让读者用自己熟悉的编程语言来理解动画,笔者将贴出多种编程语言的参考代码,代码全部来源于网上。

    C++代码实现

    C++代码实现

    Java代码实现

    Java代码实现

    Python代码实现

    Python代码实现

    JavaScript代码实现

    JavaScript代码实现
    如果你是iOS开发者,可以在GitHub上 https://github.com/MisterBooo/Play-With-Sort-OC 获取更直观可调试运行的源码。

  • 相关阅读:
    防火墙透明模式
    HP管理工具System Management Homepage安装配置
    kbmmw 中JSON 中使用SQL 查询
    kbmmw 中JSON 操作入门
    第一个kbmmw for Linux 服务器
    kbmmw 5.02发布
    kbmmw 5.01 发布
    使用delphi 10.2 开发linux 上的Daemon
    使用unidac 在linux 上无驱动直接访问MS SQL SERVER
    使用delphi 10.2 开发linux 上的webservice
  • 原文地址:https://www.cnblogs.com/fivestudy/p/10075421.html
Copyright © 2011-2022 走看看