首页 > 编程语言 > 详细

归并排序

时间:2016-08-19 00:59:40      阅读:203      评论:0      收藏:0      [点我收藏+]
#define Max 2147483647

#include <iostream>
#include <cstdlib>

using namespace std;

void Merge(int *A, int p, int q, int r)
{
	int i, j;
	int n1 = q - p + 1;
	int n2 = r - q;
	//归并堆
	int *L = new int[n1 + 1];
	//归并堆
	int *R = new int[n2 + 1];
	for (i = 0; i < n1; ++i)
	{
		L[i] = A[p + i - 1];
	}
	for (j = 0; j < n2; ++j)
	{
		R[j] = A[q + j];
	}
	L[n1] = Max;
	R[n2] = Max;
	i = 0;
	j = 0;
	for (int k = p - 1; k < r; ++k)
	{
		if (L[i] <= R[j])
		{
			A[k] = L[i++];
		}
		else
		{
			A[k] = R[j++];
		}
	}
}

void MergeSort(int *A, int p, int r)
{
	if (p < r)
	{
		int q = (p + r) / 2;
		MergeSort(A, p, q);
		MergeSort(A, q + 1, r);
		Merge(A, p, q, r);
	}
}

int main(void)
{
	int A[7] = { 18, 45, 36, 30, 92, 72, 25 };
	MergeSort(A, 1, 7);
	for (int i = 0; i < 7; ++i)
	{
		cout << A[i] << " ";
	}
	cout << endl;
	system("pause");
	return 0;
}

  

技术分享

 

分析:T(n) = c  若n=1

       =2T(n/2)+cn  若n>1

   解得:T(n) = 2^(log(2)n)T(1) + (2^0+2^1+···+2^(log(2)n - 1))cn

        =2^(log(2)n)c + (2^0+2^1+···+2^(log(2)n - 1))cn

   总代价为cnlgn+cn,它就是O(nlgn)。

归并排序

原文:http://www.cnblogs.com/mubu/p/5786033.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!