#include<iostream>
#include<malloc.h>
#include<algorithm>
using namespace std;
template<typename ElementType>
void Merge(ElementType A[], ElementType TmpA[], int L, int R, int RightEnd);
template<typename ElementType>
void MSort(ElementType A[], ElementType TmpA[], int L, int RightEnd);
template<typename ElementType>
void Merge_sort(ElementType A[], int N);
int main()
{
int A[10] = { 13, 23, 12, 56, 43, 20, 22, 11, 6, 8 };
Merge_sort(A, 10);
for (auto it = begin(A); it != end(A); it++)
cout << *it << " ";
system("pause");
return 0;
}
template<typename ElementType>
void Merge(ElementType A[], ElementType TmpA[], int L, int R, int RightEnd)
{
int LeftEnd = R - 1;
int Tmp = L;
int NumElements = RightEnd - L + 1;
while (L <= LeftEnd && R <= RightEnd)
{
if (A[L] <= A[R]) TmpA[Tmp++] = A[L++];
else TmpA[Tmp++] = A[R++];
}
while (L <= LeftEnd)
TmpA[Tmp++] = A[L++];
while (R <= RightEnd)
TmpA[Tmp++] = A[R++];
for (int i = 0; i < NumElements; i++, RightEnd--)
A[RightEnd] = TmpA[RightEnd];
}
template<typename ElementType>
void MSort(ElementType A[], ElementType TmpA[], int L, int RightEnd)
{
int Center;
if (L < RightEnd)
{
Center = (L + RightEnd) / 2;
MSort(A, TmpA, L, Center);
MSort(A, TmpA, Center + 1, RightEnd);
Merge(A, TmpA, L, Center + 1, RightEnd);
}
}
template<typename ElementType>
void Merge_sort(ElementType A[], int N)
{
ElementType *TmpA;
TmpA = (ElementType *)malloc(N *sizeof(ElementType));
if (TmpA != NULL)
{
MSort(A, TmpA, 0, N - 1);
}
else
{
cout << "No enough space";
}
}
归并排序
最新推荐文章于 2024-12-15 17:47:59 发布