void mergeSort(int a[], int len)
{
int *temp = new int[len];
int gap = 1;
while (gap < len) {
for (int i = 0; i < len; i += gap * 2)
{
int mid = i + gap > len - 1 ? len : i + gap;
int end = mid + gap > len - 1 ? len : mid + gap;
int j = i;
int k = mid;
int cur = i;
while (j != mid && k != end)
{
if (a[j] < a[k])
temp[cur++] = a[j++];
else
temp[cur++] = a[k++];
}
while (j != mid)
temp[cur++] = a[j++];
while (k != end)
temp[cur++] = a[k++];
}
for (int i = 0; i < len; ++i)
a[i] = temp[i];
gap = gap << 1;
}
delete[] temp;
}