rendered paste body#include <iostream>#include <cmath>#include <ctime>#include "header.h"#include <boost/thread/thread.hpp>using namespace std; extern int * tab; extern int * temptab;extern int * temptab_2; extern int * tab_2; extern unsigned int tab_size; int pocz1, kon1, pocz2, kon2;void merge(int pocz, int sr, int kon){ int i, j,q; pocz1 = pocz; kon1 = kon; for (i=pocz1; i<=kon1; i++) temptab[i]=tab[i]; // Skopiowanie danych do tablicy pomocniczej i=pocz; j=sr+1; q=pocz; // Ustawienie wskaznikow tablic while (i<=sr && j<=kon) // Przenoszenie danych z sortowaniem ze zbiorow pomocniczych do tablicy głównej{ if (temptab[i]<temptab[j]) tab[q++]=temptab[i++]; else tab[q++]=temptab[j++]; } while (i<=sr) tab[q++]=temptab[i++]; // Przeniesienie nie skopiowanych danych ze zbioru pierwszego w przypadku, gdy drugi zbior sie skonczyl}void Sortuj_sekwencyjnie(){time_t czas1, czas2;czas1 = clock(); //czas startmergesort(0,tab_size-1); // algorytm startczas2 = clock(); // czas stopdouble czas = double(czas2-czas1)/CLOCKS_PER_SEC;cout<<"Czas sortowania tablicy "<<tab_size<<" elementowej: "<<czas<<" s. [Sekwencyjnie]"<<endl; }void Sortuj_watkowo(){time_t czas1, czas2;czas1 = clock();mergesort_threads(0,tab_size-1); //uruchomienie mechanizmu sortowanieczas2 = clock();double czas = double(czas2-czas1)/CLOCKS_PER_SEC;cout<<"Czas sortowania tablicy "<<tab_size<<" elementowej: "<<czas<<" s. [Watkowo]"<<endl;}void mergesort(int pocz, int kon){ int sr; if (pocz<kon) { sr=(pocz+kon)/2; mergesort(pocz, sr); // Dzielenie lewej czesci mergesort(sr+1, kon); // Dzielenie prawej czesci merge(pocz, sr, kon); // Laczenie czesci lewej i prawej }}void mergesort_threads(int pocz, int kon){ int sr; if (pocz<kon) { sr=(pocz+kon)/2; mergesort_threads(pocz, sr); // Dzielenie lewej czesci mergesort_threads(sr+1, kon); // Dzielenie prawej czesci merge_threads(pocz, sr, kon); }}void copy1(){ for (int i=pocz1; i<(kon1)/2; i++) temptab[i]=tab_2[i];}void copy2(){ for (int i=(kon1/2)+1; i<kon1; i++) temptab[i]=tab_2[i];}void merge_threads(int pocz, int sr, int kon){ int i, j,q; pocz1 = pocz; kon1 = kon;for (int i=pocz1; i<=kon1; i++) temptab_2[i]=tab_2[i]; boost :: thread w1(©1);boost :: thread w2(©2); w1.join(); w2.join();//cout<<"koniec etapu watkow"<<endl; i=pocz; j=sr+1; q=pocz; // Ustawienie wskaznikow tablic while (i<=sr && j<=kon) // Przenoszenie danych z sortowaniem ze zbiorow pomocniczych do tablicy głównej{ if (temptab_2[i]<temptab_2[j]) tab_2[q++]=temptab_2[i++]; else tab_2[q++]=temptab_2[j++]; } while (i<=sr) tab_2[q++]=temptab_2[i++]; // Przeniesienie nie skopiowanych danych ze zbioru pierwszego w przypadku, gdy drugi zbior sie skonczyl}