算法导论2归并排序

来源:互联网 发布:显卡风扇测试软件 编辑:程序博客网 时间:2024/05/16 12:17

合并排序,也叫归并排序,是利用递归把两个已经排序好的数据合并成一个有序数组的过程.
最差时间复杂度:O(nlog(n))
最优时间复杂度:O(n)
数据结构:数组.
控件复杂度:O(n),需要一个临时数组
原理:
假设A和B是两个已经排序好的数组,要生成一个C数据包含AB所有元素并且是有序的,他的过程是这样的,把A,B的当前位置(从0开始)的元素做比较,较小的元素放到C的当前位置,被选中的数组当前位置增加一位,C的当前位置也增加一位.然后继续比较,直到其中一个数组比较完毕,把另外的数组剩下的元素全部放在C的末尾.这样就得到一个排序好的C数组.
合并排序的前提是A和B都是已经排序好的数组.
如果要对一个数组排序,可以把数组分为左右两部分,分别对这两部分排序,在利用上述方法合并.这就是分治法.
合并排序利用递归把数组一层一层分开.直到最后剩一个元素了(1个元素当然是排序好的),再一层一层的把数组合并.
很多算法用到递归,递归的理解,可参考文章:理解递归.
http://blog.csdn.net/dawei2047218/article/details/23681229
合并排序的算法C语言实现如下

0 0