/**
* 排序算法学习之合并排序
* @author Sking
实现方法:
将待排序数组中相邻元素两两配对作为子数组,排序各个子数组,
构成n/2组长度为2的排序好的子数组;然后将长度为2的子排序
子数组再两两配对,并排序,构成长度为4的已排序子数组。如此递归
直到整个数组是已排序为止。
最坏时间复杂度:O(n*log(n))
平均时间复杂度:O(n*log(n))
辅助空间:O(n)
稳定性:稳定
*/
package 递归分治;
public class MergeSort {
@SuppressWarnings("rawtypes")
/**
* 对输入数组执行合并排序
* @param a 指定数组,索引有效位置从0开始
*/
public void mergeSort(Comparable[] a) {
Comparable[] b = new Comparable[a.length];// 辅助空间
int s = 1;// 初始子数组长度设置为1
while (s < a.length) {
mergePass(a, b, s);
s += s;
mergePass(b, a, s);
s += s;
}
}
/**
* 合并相邻的已排序子数组为更大的已排序子数组
*
* @param x
* 包含了已排序子数组的数组
* @param y
* 包含更大的已排序子数组的数组
* @param s
* 已排序子数组的长度
*/
@SuppressWarnings("rawtypes")
public static void mergePass(Comparable[] x, Compar
递归分治算法之合并排序(Java版本)
最新推荐文章于 2020-07-24 21:55:28 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)