void MergeSort(int low, int high)
{
int mid = (low + high) / 2;
if (high - low < 1)
{
return;
}
MergeSort(low, mid);
MergeSort(mid + 1, high);
Merge(low, mid, high);
}
void Merge(int low, int mid, int high)
{
int* A = g_szArray + low;
int llen = mid - low + 1;
int* B = new int[llen];
for (int i = 0; i < llen; i++)
{
B[i] = g_szArray[low + i];
}
int hlen = high - mid;
int* C = g_szArray + mid + 1;
for (int i = 0, j = 0, k = 0; (j < llen) || (k < hlen);)
{
if ((j < llen) && (!(k < hlen) || (B[j] <= C[k])))
{
A[i++] = B[j++];
}
if ((k < hlen) && (!(j < llen) || (C[k] < B[j])))
{
A[i++] = C[k++];
}
}
delete []B;
}