算法分析作业二——合并排序

合并排序主要是利用分治算法思想,将n个数进行排序。

算法思想:将需要排序的元素分成大概相等的2个子集合,即左侧和右侧,生成的集合再次通过Mergesort算法进行递归分割,直到它们分解为每个集合中的单个元素。分别给2个子集合进行排序,它将每次比较中较小的元素插入到临时数组中,再选择较小元素的下一个,通过比较,再选择两者中的较小元素放至临时数组,最终将2个排好序的子集合合并成一个有序的集合。

主要分为两个阶段:拆分合并

时间复杂度:无论最好情况还是最坏情况均是O(nlogn);

空间复杂度:需要一个辅助向量来暂存两个有序子文件归并的结果,故其辅助空间复杂度为O(n);

合并排序是一种稳定的排序;存储结构要求:可用顺序存储结构,也易于在链表上实现。


public class MergeSort {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] a = {49,38,65,97,76,13,27,50};
		mergeSort(a,0,a.length-1);
		System.out.println("排好序的数组:");
		for(int e :a) {
			System.out.print(e+" ");
		}
	}
	/**
	 * 拆分阶段
	 *将数组中的元素分成2部分,每个部分再次划分,直至只剩下单个元素,再进行排序
	 * @param a 待拆分的数组
	 * @param start 数组的开始小标
	 * @param end 数组的结束下标
	 */
	public static void mergeSort(int[] a,int start,int end) {
		if(start

 

你可能感兴趣的:(算法排序)