您的位置:首页 > 其它

[一步一步写算法导论]合并排序

2014-10-13 23:04 162 查看
1.伪码

第一部分,将两个子串合并的算法



第二部分,递归分化,然后子串合并



2.c++代码

// MergeSort.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;

vector<int> A;

void Merge(vector<int >&A,int p,int q,int r){
	int n1 = q - p + 1;
	int n2 = r - q ;
	vector<int> L(n1);
	vector<int> R(n2);
	for (int i = 0; i < n1; i++)
	{
		L[i] = A[p + i];
	}
	for (int i = 0; i < n2; i++)
	{
		R[i] = A[q +1+ i];
	}
	int i = 0;
	int j = 0;
	int k = 0;
	for (k = p; k < r && i < n1 && j < n2; k++)
	{
		if (L[i]<=R[j])
		{
			A[k] = L[i];
			i++;
		}
		else
		{
			A[k] = R[j];
			j++;
		}
	}
	while (i< n1)
	{
		A[k++] = L[i++];
	}
	while (j< n2)
	{
		A[k++] = R[j++];
	}
}
void MergeSort(vector<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 _tmain(int argc, _TCHAR* argv[])
{
	A = { 5, 2, 4, 7, 1, 2, 3, 6 };

	for (auto it = A.begin(); it < A.end();it++)
	{
		cout << *it << " ";
	}
	MergeSort(A, 0, 7);
	cout << endl;
	for (auto it = A.begin(); it < A.end(); it++)
	{
		cout << *it << " ";
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: