示意图如下:
代码如下:
#include<iostream>
using namespace std;
void merge(int A[], int B[], int arr[], int lengthA, int lengthB)
{
int i = 0, j = 0,count=0;
while (count<lengthA+lengthB)
{
if (A[i] < B[j])
{
arr[count] = A[i];
++i;
count++;
}
else
{
arr[count] = B[j];
++j;
count++;
}
if (i == lengthA)
{
while (j < lengthB)
{
arr[count] = B[j];
++j;
count++;
}
}
else if (j == lengthB)
{
while (i < lengthA)
{
arr[count] = A[i];
++i;
count++;
}
}
}
}
void merge_sort(int arr[], int n)
{
if (n > 1)
{
int i = n / 2;
int j = n - n / 2;
int *A = new int[i];
int *B = new int[n - n / 2];
for (int k = 0; k < i; k++)
A[k] = arr[k];
for (int k = 0; k < j; k++)
B[k] = arr[i + k];
merge_sort(A, i);
merge_sort(B, j);
merge(A, B, arr, i, j);
delete []A;
delete []B;
}
}
void main()
{
int arr[] = { 3, 5, 4, 6, 2, 8, 7, 9,1,10 };
int n = sizeof(arr) / sizeof(int);
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
merge_sort(arr, n);
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
system("pause");
}