代码实现
#include<iostream>
using namespace std;
typedef int elemtype;
void MergeSort(elemtype arr[], int n);
void Msort(elemtype arr[], elemtype temp[], int left, int right);
void merge(elemtype arr[], elemtype temp[], int left, int mid, int right);
void MergeSort(elemtype arr[], int n)
{
elemtype* temp = new elemtype[n];
Msort(arr, temp, 0, n - 1);
delete[] temp;
}
void Msort(elemtype arr[], elemtype temp[],int left, int right)
{
if (left < right)
{
int mid = (left + right) / 2;
Msort(arr, temp, left, mid);
Msort(arr, temp, mid + 1, right);
merge(arr, temp, left, mid, right);
}
}
void merge(elemtype arr[], elemtype temp[], int left, int mid, int right)
{
int l_pos = left;
int r_pos = mid + 1;
int pos = left;
while (l_pos <= mid && r_pos <= right)
{
if (arr[l_pos] < arr[r_pos])
temp[pos++] = arr[l_pos++];
else
temp[pos++] = arr[r_pos++];
}
while (l_pos <= mid)
temp[pos++] = arr[l_pos++];
while (r_pos <= right)
temp[pos++] = arr[r_pos++];
while (left <= right)
{
arr[left] = temp[left];
left++;
}
}