#include <bits/stdc++.h>
#include "teatr.h"
#include "message.h"
using namespace std;
int sortowanie(int tab[], int tmp[], int poc, int kon);
int zlacz(int tab[], int tmp[], int poc, int sro, int kon);
int MergeSort(int tab[], int rozmiar)
{
int* tmp = (int*)malloc(sizeof(int) * rozmiar);
return sortowanie(tab, tmp, 0, rozmiar - 1);
}
int sortowanie(int tab[], int tmp[], int poc, int kon)
{
int sro, wynik = 0;
if(kon > poc)
{
sro = (kon + poc) / 2;
wynik = sortowanie(tab, tmp, poc, sro);
wynik += sortowanie(tab, tmp, sro + 1, kon);
wynik += zlacz(tab, tmp, poc, sro + 1, kon);
}
return wynik;
}
int zlacz(int tab[], int tmp[], int poc, int sro, int kon)
{
int i, j, k, wynik = 0;
i = poc;
j = sro;
k = poc;
while(i <= sro - 1 && j <= kon)
{
if(tab[i] <= tab[j]) tmp[k++] = tab[i++];
else
{
tmp[k++] = tab[j++];
wynik = wynik + (sro - i);
}
}
while(i <= sro - 1) tmp[k++] = tab[i++];
while(j <= kon) tmp[k++] = tab[j++];
for (i = poc; i <= kon; i++) tab[i] = tmp[i];
return wynik;
}
int main()
{
if(MyNodeId() == 0)
{
int n = GetN();
int tab[n];
for(int i=0; i < n; i++) tab[i] = GetElement(i);
int wynik = MergeSort(tab, n);
cout<<wynik<<endl;
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include <bits/stdc++.h> #include "teatr.h" #include "message.h" using namespace std; int sortowanie(int tab[], int tmp[], int poc, int kon); int zlacz(int tab[], int tmp[], int poc, int sro, int kon); int MergeSort(int tab[], int rozmiar) { int* tmp = (int*)malloc(sizeof(int) * rozmiar); return sortowanie(tab, tmp, 0, rozmiar - 1); } int sortowanie(int tab[], int tmp[], int poc, int kon) { int sro, wynik = 0; if(kon > poc) { sro = (kon + poc) / 2; wynik = sortowanie(tab, tmp, poc, sro); wynik += sortowanie(tab, tmp, sro + 1, kon); wynik += zlacz(tab, tmp, poc, sro + 1, kon); } return wynik; } int zlacz(int tab[], int tmp[], int poc, int sro, int kon) { int i, j, k, wynik = 0; i = poc; j = sro; k = poc; while(i <= sro - 1 && j <= kon) { if(tab[i] <= tab[j]) tmp[k++] = tab[i++]; else { tmp[k++] = tab[j++]; wynik = wynik + (sro - i); } } while(i <= sro - 1) tmp[k++] = tab[i++]; while(j <= kon) tmp[k++] = tab[j++]; for (i = poc; i <= kon; i++) tab[i] = tmp[i]; return wynik; } int main() { if(MyNodeId() == 0) { int n = GetN(); int tab[n]; for(int i=0; i < n; i++) tab[i] = GetElement(i); int wynik = MergeSort(tab, n); cout<<wynik<<endl; } return 0; } |
English