#include<iostream>
using namespace std;
void Merge(int A[], int TmpArray[], int Lpos, int Rpos, int RightEnd)
{
int i, LeftEnd, NumElements, TmpPos;
LeftEnd = Rpos - 1;
TmpPos = Lpos;
NumElements = RightEnd - Lpos + 1;
//main loop
while (Lpos <= LeftEnd && Rpos <= RightEnd)
if (A[Lpos] <= A[Rpos])
TmpArray[TmpPos++] = A[Lpos++];
else
TmpArray[TmpPos++] = A[Rpos++];
//Copy rest of first half
while (Lpos <= LeftEnd)
TmpArray[TmpPos++] = A[Lpos++];
while (Rpos <= RightEnd)
TmpArray[TmpPos++] = A[Rpos++];
for (i = 0; i < NumElements; i++, RightEnd--)
A[RightEnd] = TmpArray[RightEnd];
}
void Msort(int A[], int TmpArray[], int Left, int Right)
{
int Center;
if (Left < Right)
{
Center = (Left + Right) / 2;
Msort(A, TmpArray, Left, Center);
Msort(A, TmpArray, Center + 1, Right);
Merge(A, TmpArray, Left, Center + 1, Right);
}
}
void Mergesort(int A[], int N)
{
int *TmpArray = new int[N+1];
// or TmpArray = (int*)malloc((N + 1) * sizeof(int));
if (TmpArray != NULL)
{
Msort(A, TmpArray, 0, N - 1);
delete[] TmpArray;
}
else
throw "No space for tmp array!!!";
}
int main()
{
int Arr[6] = { 1,3,2,4,6,7 };
int tmp[6];
Mergesort(Arr,6);
for (int i = 0; i < 6; i++)
cout << Arr[i] << endl;
return 0;
}
归并排序复习
最新推荐文章于 2021-11-01 19:38:19 发布