Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.87 KB | None | 0 0
  1. void merge(vector<int> &a, vector<int> &temp, int mid, int leftStart, int rightEnd) {
  2. int leftEnd = mid;
  3. int rightStart = leftEnd + 1;
  4. int curIndex = leftStart, left = leftStart;
  5. for (;leftStart <= leftEnd && rightStart <= rightEnd;) {
  6. if (a[leftStart] <= a[rightStart])
  7. temp[curIndex++] = a[leftStart++];
  8. else
  9. temp[curIndex++] = a[rightStart++], res += leftEnd - leftStart + 1;
  10. }
  11. for (;leftStart <= leftEnd;) temp[curIndex++] = a[leftStart++];
  12. for (;rightStart <= rightEnd;) temp[curIndex++] = a[rightStart++];
  13. for (int i = left; i <= rightEnd; i++) a[i] = temp[i];
  14. }
  15.  
  16.  
  17. void mergesort(vector<int> &a, vector<int> &temp, int left, int right) {
  18. if (left >= right) return;
  19. int mid = (left + right) / 2;
  20. mergesort(a, temp, left, mid);
  21. mergesort(a, temp, mid + 1, right);
  22. merge(a, temp, mid, left, right);
  23. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement