Java版归并排序

来源:互联网 发布:mac导出日历 编辑:程序博客网 时间:2024/05/17 06:42


归并排序是利用递归与分治技术将数据序列分为越来越小的半子表,再对半子表排序,最后再用递归方法将排好的半子表合并为越来越大的有序序列。

归并排序算法的原理如下:对于给定的一组记录(假设有n个记录),首先将每两个相邻的长度为1的序列进行归并,得到n/2(向上取整数)个长度为2或1的有序子序列,再将其两两合并,反复执行此过程,直到得到一个有序序列。

所以,归并排序的关键就是前两步:

第一步:划分半子表;

第二步:合并半子表。

以数组{49,38,65,97,76,13,27}为例,归并排序的具体步骤如下:

初始关键字:[49] [38][65][97][76][13][27]

一趟归并后:[38  49]   [65  97]  [13  76]   [27]

二趟归并后:[38  49   65   97]  [13  27  76  ]

三趟归并后:[13 27  38  49  65  76  97]

程序代码如下:


程序运行结果:

536219487356219487356219487356129487123569487123564987123564978123564789123456789排序后的数组:123456789


归并排序算法复杂度分析:

最好时间:O(nlogn)

平均时间:O(nlogn)

最坏时间:O(nlogn)

辅助存储:O(n)

稳定性:稳定

备注:n大时较好

0 0