Advertisement
Stybyk

paltamvlakna

Nov 11th, 2014
461
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.42 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\\n\", 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]\\n\", kolik_ms( &cas_pred, &cas_po ) );
  206.    
  207.    merge();
  208.    merge2();
  209.    merge3();
  210.    vypisPoleFloat(poleFloat,maxVelikostPole);
  211.    getchar();
  212.    return 0;
  213. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement