Skip to content

Instantly share code, notes, and snippets.

@dennisbot
Created June 23, 2017 17:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dennisbot/442d9887572d4b899b15d4ed1b9d9ce2 to your computer and use it in GitHub Desktop.
Save dennisbot/442d9887572d4b899b15d4ed1b9d9ce2 to your computer and use it in GitHub Desktop.
MergeSort.cpp
void merge(vector<int> &a, vector<int> &temp, int mid, int leftStart, int rightEnd) {
int leftEnd = mid;
int rightStart = leftEnd + 1;
int curIndex = leftStart, left = leftStart;
for (;leftStart <= leftEnd && rightStart <= rightEnd;) {
if (a[leftStart] <= a[rightStart])
temp[curIndex++] = a[leftStart++];
else
temp[curIndex++] = a[rightStart++], res += leftEnd - leftStart + 1;
}
for (;leftStart <= leftEnd;) temp[curIndex++] = a[leftStart++];
for (;rightStart <= rightEnd;) temp[curIndex++] = a[rightStart++];
for (int i = left; i <= rightEnd; i++) a[i] = temp[i];
}
void mergesort(vector<int> &a, vector<int> &temp, int left, int right) {
if (left >= right) return;
int mid = (left + right) / 2;
mergesort(a, temp, left, mid);
mergesort(a, temp, mid + 1, right);
merge(a, temp, mid, left, right);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment