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; }