All pastes #806020 Raw Edit

Unnamed

public cpp v1 · immutable
·published 2007-12-04 22:09 UTC
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(&copy1);boost :: thread w2(&copy2);  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}