Stybyk

vlakna 4

Nov 4th, 2014
418
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.41 KB | None | 0 0
  1. // main.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include stdafx.h
  5. #include <math.h>
  6. #include <time.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <windows.h>
  10.  
  11. int const maxVelikostPole = 20;
  12. float poleFloat[maxVelikostPole];
  13.  
  14. void naplPoleFloat( float pole[], int velikost )
  15. {
  16.     srand( (unsigned int) time( NULL ) );
  17.  
  18.     for ( int i = 0; i < velikost; i++ ) {
  19.         pole[i] = (float) rand() / ( (float) RAND_MAX / 20001 ) - 10000;
  20.     }
  21. }
  22.  
  23. void vypisPoleFloat( float pole[], int velikost )
  24. {
  25.     for ( int i = 0; i < velikost; i++ ) {
  26.         printf( %.2f, pole[i] );
  27.     }
  28.  
  29. }
  30.  
  31.  
  32.  
  33. int kolik_ms(LPFILETIME pred, LPFILETIME po)
  34. {
  35.     hyper pred64b = pred->dwHighDateTime;
  36.     pred64b = (pred64b << 32) | pred->dwLowDateTime;
  37.     hyper po64b = po->dwHighDateTime;
  38.     po64b = (po64b << 32) | po->dwLowDateTime;
  39.     return (int) ((po64b - pred64b) / 10000);
  40. }
  41.  
  42. void selectSort( int od, int doo, float pole[] )
  43. {
  44.     for ( int i = od; i < doo; i++ ) {
  45.         int maxIndex = i;
  46.  
  47.         for ( int j = i + 1; j < doo; j++ ) {
  48.             if ( pole[j] < pole[maxIndex] ) {
  49.                 maxIndex = j;
  50.             }
  51.         }
  52.  
  53.         int pom = pole[i];
  54.         pole[i] = pole[maxIndex];
  55.         pole[maxIndex] = pom;
  56.     }
  57. }
  58.  
  59.  
  60. struct struktura{
  61. int od;
  62. int doo;
  63. };
  64.  
  65. DWORD WINAPI vlakno(LPVOID pom)
  66. {
  67.         struktura *tmp = (struktura *)pom;
  68.         selectSort(tmp->od, tmp->doo,poleFloat);
  69.         return 0;
  70. }
  71.  
  72.  
  73.  
  74. void merge()
  75. {
  76.  
  77.         float *pole2 = new float [maxVelikostPole / 2];
  78.         int index1 = 0;
  79.         int index2 = maxVelikostPole / 4;
  80.         int index3 = 0;
  81.         int size1 = maxVelikostPole / 4;
  82.         int size2 = maxVelikostPole / 2;
  83.  
  84.         while (index1 < size1 || index2 < size2)
  85.         {
  86.                 if ((poleFloat[index1] < poleFloat[index2] && index1 < size1) || index2 >= size2)
  87.                 {
  88.                         pole2[index3] = poleFloat[index1];
  89.                         index1++;
  90.                 }
  91.                 else
  92.                 {
  93.                         pole2[index3] = poleFloat[index2];
  94.                         index2++;
  95.                 }
  96.                 index3++;
  97.         }
  98.  
  99.         for ( int i = 0; i < maxVelikostPole / 2; i++ )
  100.         {
  101.             poleFloat[i] = pole2[i];
  102.         }
  103.  
  104. }
  105.  
  106. void merge2()
  107. {
  108.  
  109.         float *pole3 = new float [maxVelikostPole / 2];
  110.         int index1 = maxVelikostPole / 2;
  111.         int index2 = (maxVelikostPole*3) /4;
  112.         int index3 = 0;
  113.         int size1 = (maxVelikostPole*3) / 4;
  114.         int size2 = maxVelikostPole;
  115.  
  116.         while (index1 < size1 || index2 < size2)
  117.         {
  118.                 if ((poleFloat[index1] < poleFloat[index2] && index1 < size1) || index2 >= size2)
  119.                 {
  120.                         pole3[index3] = poleFloat[index1];
  121.                         index1++;
  122.                 }
  123.                 else
  124.                 {
  125.                         pole3[index3] = poleFloat[index2];
  126.                         index2++;
  127.                 }
  128.                 index3++;
  129.         }
  130.  
  131.         for ( int i = 0; i < maxVelikostPole / 2; i++ )
  132.         {
  133.             poleFloat[(maxVelikostPole / 2) + i] = pole3[i];
  134.         }
  135.  
  136. }
  137.  
  138. void merge3()
  139. {
  140.  
  141.         float *pole4 = new float [maxVelikostPole ];
  142.         int index1 = 0;
  143.         int index2 = maxVelikostPole / 2;
  144.         int index3 = 0;
  145.         int size1 = maxVelikostPole / 2;
  146.         int size2 = maxVelikostPole;
  147.  
  148.         while (index1 < size1 || index2 < size2)
  149.         {
  150.                 if ((poleFloat[index1] < poleFloat[index2] && index1 < size1) || index2 >= size2)
  151.                 {
  152.                         pole4[index3] = poleFloat[index1];
  153.                         index1++;
  154.                 }
  155.                 else
  156.                 {
  157.                         pole4[index3] = poleFloat[index2];
  158.                         index2++;
  159.                 }
  160.                 index3++;
  161.         }
  162.  
  163.         for ( int i = 0; i < maxVelikostPole; i++ )
  164.         {
  165.             poleFloat[i] = pole4[i];
  166.         }
  167.  
  168. }
  169. int _tmain(int argc, _TCHAR* argv[])
  170. {  
  171.      
  172.     naplPoleFloat(poleFloat,maxVelikostPole);
  173.      
  174.     FILETIME cas_pred, cas_po;
  175.      
  176.     struktura * cast1 = new struktura;
  177.     cast1->od = 0;
  178.     cast1->doo = maxVelikostPole /4;
  179.      
  180.     struktura * cast2 = new struktura;
  181.     cast2->od = maxVelikostPole /4;
  182.     cast2->doo = (maxVelikostPole * 2)/4;
  183.      
  184.     struktura * cast3 = new struktura;
  185.     cast3->od = (maxVelikostPole * 2)/4;
  186.     cast3->doo = (maxVelikostPole * 3)/4;
  187.      
  188.     struktura * cast4 = new struktura;
  189.     cast4->od = (maxVelikostPole * 3)/4;
  190.     cast4->doo = maxVelikostPole;
  191.  
  192.     GetSystemTimeAsFileTime (&cas_pred);    
  193.  
  194.         HANDLE p1 = CreateThread(0, 0, vlakno, cast1, 0, 0);
  195.         HANDLE p2 = CreateThread(0, 0, vlakno, cast2, 0, 0);
  196.         HANDLE p3 = CreateThread(0, 0, vlakno, cast3, 0, 0);
  197.         HANDLE p4 = CreateThread(0, 0, vlakno, cast4, 0, 0);
  198.         WaitForSingleObject(p1, INFINITE);
  199.         WaitForSingleObject(p2, INFINITE);
  200.         WaitForSingleObject(p3, INFINITE);
  201.         WaitForSingleObject(p4, INFINITE);
  202.  
  203.     GetSystemTimeAsFileTime (&cas_po);
  204.  
  205.     //printf( \"Cas trvani sortu: %d [ms], kolik_ms( &cas_pred, &cas_po ) );
  206.      
  207.     merge();
  208.     merge2();
  209.     merge3();
  210.     vypisPoleFloat(poleFloat,maxVelikostPole);
  211.     getchar();
  212.     return 0;
  213. }
Add Comment
Please, Sign In to add comment