Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. int mergesort(int a[], int first, int last, int n);
  7. int merge(int a[], int first, int m, int last, int n);
  8.  
  9. int main() {
  10.     ifstream fin("input.txt");
  11.     ofstream fout("output.txt");
  12.     int n;
  13.     fin >> n;
  14.     int *a = new int [n];
  15.     for(int i = 0; i < n; i++){
  16.         fin >> a[i];
  17.     }
  18.     fout << mergesort(a, 0, n - 1, n);
  19.     return 0;
  20. }
  21.  
  22. int merge(int a[], int first, int m, int last, int n){
  23.    int amt = 0;
  24.    int l = first;
  25.    int r = last;
  26.    int k = first;
  27.    int *b = new int [n];
  28.    while ((l <= m - 1) && (r <= last)){
  29.        if (a[l] <= a[r]){
  30.            b[k] = a[l];
  31.            k++;
  32.            l++;
  33.        }
  34.        else{
  35.            b[k] = a[r];
  36.            k++;
  37.            r++;
  38.            amt = amt + (m - l);
  39.        }
  40.    }
  41.     while (l <= m - 1) {
  42.         b[k] = a[l];
  43.         k++;
  44.         l++;
  45.     }
  46.     while (r <= last) {
  47.         b[k] = a[r];
  48.         k++;
  49.         r++;
  50.     }
  51.     for(int i = 0; i < last; i++){
  52.         a[i] = b[i];
  53.     }
  54.     return amt;
  55. }
  56.  
  57. int mergesort(int a[], int first, int last, int n){
  58.    int m = (first + last)/2;
  59.    int amt = 0;
  60.    if (first < last){
  61.        amt  = mergesort(a, first, m, n);
  62.        amt += mergesort(a, m + 1, last, n);
  63.        amt += merge(a, first, m + 1, last, n);
  64.    }
  65.     return amt;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement