#include<iostream>
using namespace std;
void mergeSort(int *, int, int);
void merge(int*, int, int, int);
void display_arr(int * A, int length);
int main()
{
int oriArr[12] = { 2, 1, 4, 3, 5, 8, 6, 5, 7, 0, 10, 12 };
cout << "**************the ori array is **************" << endl;
display_arr(oriArr, 12);
mergeSort(oriArr, 0, 12);
cout << "**************the aorted array is **************" << endl;
display_arr(oriArr, 12);
}
void display_arr(int * A, int length)
{
for (int i = 0; i < length; i++)
cout << A[i] << " ";
cout << endl << endl;
}
void mergeSort(int * A, int begin, int end)
{
if (end > begin)
{
int middle = (begin + end) / 2;
if (middle > begin)
{
mergeSort(A, begin, middle);
mergeSort(A, middle, end);
merge(A, begin, middle, end);
}
}
}
void merge(int *A, int begin, int middle, int end)
{
int * arr1 = new int[middle - begin + 1];
int * arr2 = new int[end - middle + 1];
for (int i = 0; i < middle-begin; i++)
arr1[i] = A[begin + i];
arr1[middle - begin] = 100000;
for (int i = 0; i < end - middle; i++)
arr2[i] = A[middle + i];
arr2[end - middle] = 100000;
int index = begin;
int i = 0;
int j = 0;
while (index != end)
{
if (arr1[i] < arr2[j])
{
A[index++] = arr1[i++];
}
else
A[index++] = arr2[j++];
}
delete[] arr1;
delete[] arr2;
}
using namespace std;
void mergeSort(int *, int, int);
void merge(int*, int, int, int);
void display_arr(int * A, int length);
int main()
{
int oriArr[12] = { 2, 1, 4, 3, 5, 8, 6, 5, 7, 0, 10, 12 };
cout << "**************the ori array is **************" << endl;
display_arr(oriArr, 12);
mergeSort(oriArr, 0, 12);
cout << "**************the aorted array is **************" << endl;
display_arr(oriArr, 12);
}
void display_arr(int * A, int length)
{
for (int i = 0; i < length; i++)
cout << A[i] << " ";
cout << endl << endl;
}
void mergeSort(int * A, int begin, int end)
{
if (end > begin)
{
int middle = (begin + end) / 2;
if (middle > begin)
{
mergeSort(A, begin, middle);
mergeSort(A, middle, end);
merge(A, begin, middle, end);
}
}
}
void merge(int *A, int begin, int middle, int end)
{
int * arr1 = new int[middle - begin + 1];
int * arr2 = new int[end - middle + 1];
for (int i = 0; i < middle-begin; i++)
arr1[i] = A[begin + i];
arr1[middle - begin] = 100000;
for (int i = 0; i < end - middle; i++)
arr2[i] = A[middle + i];
arr2[end - middle] = 100000;
int index = begin;
int i = 0;
int j = 0;
while (index != end)
{
if (arr1[i] < arr2[j])
{
A[index++] = arr1[i++];
}
else
A[index++] = arr2[j++];
}
delete[] arr1;
delete[] arr2;
}