分治法--合并排序

package com.duoduo.day316;
/**
 * 合并排序
 * 分解   ----治理----合并
 * @author 多多
 *
 */
import java.util.Scanner;
public class MergeSort {
	public static void main(String [] args) {
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入数列中的元素个数:");
		int n=sc.nextInt();
		int [] arr=new int[n];
		System.out.println("请依次输入数列中的元素:");
		for(int i=0;i>1);
			mergeSort(arr,low,middle);     //分解成两个子序列 并分别合并排序
			mergeSort(arr,middle+1,high);
			merge(arr,low,middle,high);    //将两个子序列合并起来
		}
		
	}

}

分治法--合并排序_第1张图片


时间复杂度:

分解 O(1)

解决子问题:递归2T(n/2)

合并O(n)

总:T(n)=2T(n/2)+O(n)------O(nlogn)

空间复杂度:

辅助数组 O(n)

递归调用栈空间 (即递归树的深度)O(logn) 



你可能感兴趣的:(左.算法,/,趣学算法)