二分归并排序算法分析

数组排序

使用二分归并排序算法,对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k

算法思想

二分归并排序是一种分治算法。这个算法不断地将一个数组分为两部分,分别对左子数组和右子数组排序,然后将两个数组合并为新的有序数组。
算法步骤如下:
(1) 分解:分解待排序的n个元素的数组成各具n/2个元素的两个子数组。
(2) 解决:使用归并排序递归地排序两个子序列。
(3) 合并:合并两个已排序的子序列以产生排序的答案。
当待排序的数组长度为1时,递归“开始回升”,在这种情况下不要做任何工作,因为长度为1的每个数组都已排好序。

下面以绘图方式演示通过二分归并排序算法的过程
二分归并排序算法分析_第1张图片

核心代码

int Merge(int a[],int low, int mid, int high)// 合并函数
{
	int j, k, h;
	j = low;
	h = mid + 1;
	k = low;
	while (j<=mid&&h<=high)	// 将左右两端数据进行比较,放入辅助数组中
	{
		if (a[j] < a[h])
			b[k++] = a[j++];
		else
			b[k++] = a[h++];
	}
	// 将剩余的数据加入到辅助数组中
	while (j <= mid)
	{
		b[k++] = a[j++];
	}
	while (h<=high)
	{
		b[k++] = a[h++];
	}
	for (k = low; k <= high; k++)// 将辅助数组的数据复制到原数组的对应位置上
	{
		a[k] = b[k];
	}
}

int MergeSort(int a[],int low,int high)	// 递归分组函数
{
	if (low < high)
	{
		int mid = (low + high) / 2;
		MergeSort(a,low, mid);
		MergeSort(a,mid + 1, high);
		Merge(a,low, mid, high);// 调用Merge函数,合并两组数据 
	}
}

算法复杂度分析

二分归并排序算法是一种稳定的排序,其时间复杂度是O(logn)
Merge算法比较次数:

  • 最差情况下,比较次数为n-1,时间复杂度为O(nlogn),例如:2,4,6;1,3,5 比较次数为5
  • 最优情况下,比较次数为n/2,时间复杂度为O(nlogn),例如:1,2,3;4,5,6 比较次数为3
  • 平均复杂度为O(nlogn)

递归方程如下:
在这里插入图片描述
二分归并排序算法分析_第2张图片

你可能感兴趣的:(二分归并排序算法分析)