首页 > 编程语言 > 详细

归并排序

时间:2017-05-23 00:17:00      阅读:343      评论:0      收藏:0      [点我收藏+]
#include <iostream>
using namespace std;
void merge(int a[], int p, int q, int r)
{
	int n1 = q - p + 1;
	int n2 = r - q;
	int* L = new int[n1 + 2];
	int* R = new int[n2 + 2];
	L[n1+1]=0x7fffffff;
	R[n2+1]=0x7fffffff;
	//复制数组
	for(int i = 1; i <= n1; i++)
		L[i] = a[p + i - 1];
	//复制数组
	for(int i = 1; i <= n2; i++)
		R[i] = a[q + i];
	int i = 1;
	int j = 1;
	//合并
	for(int k = p; k <= r; k++)
	{
		if(L[i] <= R[j])
		{
			a[k] = L[i];
			i++;
		}
		else
		{
			a[k] = R[j];
			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()
{

	/*
	 * 归并排序
	 *将一个问题的模n分解成n/2个子问题
	 *将子问题n分解成n/2个子问题
	 *最小子问题的模等于1
	 *初始化:
	 *保持:
	 *终止:
	 */
	int a[] = { 0, 8, 6, 7, 1, 5, 4, 2, 3 };
	mergesort(a, 1, 8);
	for(int i = 1; i <= 8; i++)
		cout << a[i] << " ";
	cout << endl;
	return 0;
}

  

归并排序

原文:http://www.cnblogs.com/shuiyonglewodezzzzz/p/6892081.html

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