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;
}