普林斯顿算法part1--排序--对归并排序的一些分析和想法

       归并算法有自顶向下和自底向上两种形式。思想是一致的,除了对链表进行排序外,其他情况二者几乎是等效的。

  对于长度为N的数组,归并排序进行比较的次数在1/2n2^n)到n(2^n)之间,最后才能转化出一直一以来希望得到的NlgN(我真的是不明白n(2^n)到NlgN是怎么等价的,望大佬指点,在下只是个什么都不懂的大一学生)

  从时间上来说,我认为量大的数据更能体现出归并的优势,小规模的数组用插入排序就可以了,也可以在归并排序里对较小的子数组采用插入排序,如果仍对较小的子数组采用归并,那么此时归并的运行时间会比插入排序的运行时间稍长一些,对于量非常大的数据来说,对子数组采用插入排序所节省下来的时间是很可观的,不过仍用归并也没问题。

  每次归并大概要访问5N~6N次数组,2N次用来复制,2N次将额外空间的数组复制回原数组,剩下的用来比较。它所需要的额外空间与数组长度成正比,算法工程师仿佛很想找到一种能够在原地归并的方法,不过我搜索到的已有的实现都要比利用额外空间的方法复杂很多。

猜你喜欢

转载自www.cnblogs.com/miaoqianling/p/8952622.html