logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zmierzyć czas sortowania różnych algorytmów (np. quicksort) w C++?

krzysztof21 10 Lut 2006 17:58 5560 21
REKLAMA
  • #1 2285718
    krzysztof21
    Poziom 11  
    Posty: 18
    Cześć potrzebuje pomocy zna może ktoś jakiś program napisany w c++
    mierzący czas sortowania (np szybkiego ) Chodzi mi o porównanie czasu sortowania rórznych sposobów .


    Jest mi to bazdzo potrzebe więc jeśli ktoś ma jakieś pojęcie na ten temat to prosze o pomoc.

    :arrow: https://www.elektroda.pl/rtvforum/faq.php
  • REKLAMA
  • #2 2285835
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38801
    Pomógł: 3174
    Ocena: 6529
    Pamiętaj, że czas sortowania dla niektórych algorytmów w dużej mierzy zależy od rozkładu elementów sortowanych.
  • #3 2285931
    krzysztof21
    Poziom 11  
    Posty: 18
    Prawde mówiąc nie orientuje się w mierzeniu czasu sortowania wię będe wdzieczny za cokolwiek
  • #4 2285942
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38801
    Pomógł: 3174
    Ocena: 6529
    Ale jakieś założenia, jaki rozkład danych, jaka ilość danych, jakie dane (numeryczne, czy alfanumeryczne), jakie algorytmy.
  • #5 2285949
    mrrudzin
    Poziom 39  
    Posty: 5940
    Pomógł: 516
    Ocena: 580
    A masz programy które mają sortować?
    Jeżeli tak, to wystarczy na początku sortowania do w jakiejś zmiennej (np. A.) przechować czas systemowy, po zakończeniu sortowania zczytać znów czas systemowy i odjąć od niego czas przechowywany w zmiennej A.
    Będziesz miał różnice czasu, a więc czas w jakim trwało sortowanie.

    Warto przygotować sobie kilka różnych próbek elementów do posortowania (ekstremalnie różnych) gdyż (jak napisał tzok) każdy algorytm może inaczej radzić sobie z różnymi próbkami.
  • REKLAMA
  • #6 2286166
    krzysztof21
    Poziom 11  
    Posty: 18
    To jest program sortujący jak byś mugł wcielić tem pomysł o kturym wspomniałeś do tego programu byłbym wdzięczny
    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    const int N = 20; // Liczebność zbioru.
    
    int d[N];
    
    // Procedura sortowania szybkiego
    //-------------------------------
    
    void Sortuj_szybko(int lewy, int prawy)
    {
      int i,j,piwot;
    
      i = (lewy + prawy) / 2;
      piwot = d[i]; d[i] = d[prawy];
      for(j = i = lewy; i < prawy; i++)
      if(d[i] < piwot)
      {
        swap(d[i], d[j]);
        j++;
      }
      d[prawy] = d[j]; d[j] = piwot;
      if(lewy < j - 1)  Sortuj_szybko(lewy, j - 1);
      if(j + 1 < prawy) Sortuj_szybko(j + 1, prawy);
    }
    
    // Program główny
    //---------------
    
    int main(void)
    {
      int i;
    
      srand((unsigned)time(NULL));
      cout << "   Sortowanie szybkie\n"
              "------------------------\n"
              " (C)2005 Jerzy Walaszek \n\n"
              "Przed sortowaniem:\n\n";
    
    // Najpierw wypełniamy tablicę d[] liczbami pseudolosowymi
    // a następnie wyświetlamy jej zawartość
    
      srand((unsigned)time(NULL));
      for(i = 0; i < N; i++) d[i] = rand() % 100;
      for(i = 0; i < N; i++) cout << setw(4) << d[i];
      cout << endl;
    
    // Sortujemy
    
      Sortuj_szybko(0,N - 1);
      
    // Wyświetlamy wynik sortowania
    
      cout << "Po sortowaniu:\n\n";
      for(i = 0; i < N; i++) cout << setw(4) << d[i];
      cout << endl;
      system("PAUSE"); return 0;
    }
    Moderowany przez Light-I:

    Kod ujęto w tagi [code][/code].

  • #7 2286250
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38801
    Pomógł: 3174
    Ocena: 6529
    Tu masz przykładowe algorytmy sortujące i ich "benchmark":
    #include <iostream>
    #include <cassert>
    #include <vector>
    #include <time>
    #include <windows>
    using namespace std;
    
    //QUICKSORT
    template<class T>
    int partition(T &array, int top, int bottom)
    {
         int x = array[top];
         int i = top - 1;
         int j = bottom + 1;
         int temp;
         do
         {
               do
               {
                      j--;
               }while (x >array[j]);
    
              do
             {
                     i++;
              } while (x <array[i]);
    
              if (i < j)
             {
                     temp = array[i];    // switch elements at positions i and j
                     array[i] = array[j];
                     array[j] = temp;
             }
         }while (i < j);
         return j;           // returns middle index
    }
    
    template<class T>
    void quicksort(T &array, int top, int bottom)
    {
          // top = subscript of beginning of vector being considered
          // bottom = subscript of end of vector being considered
          // this process uses recursion - the process of calling itself
         int middle;
         if (top < bottom)
        {
              middle = partition(array, top, bottom);
              quicksort(array, top, middle);   // sort top partition
              quicksort(array, middle+1, bottom);    // sort bottom partition
         }
         return;
    }
    //END: QUICKSORT
    
    //BOUBBLESORT
    template<class T>
    void bubble_sort(T &array, int sz)
    {
          int i, j, flag = 1;    // set flag to 1 to begin initial pass
          int temp;             // holding variable
          int arrayLength = sz;
          for(i = 1; (i <= arrayLength) && flag; i++)
         {
              flag = 0;
              for (j=0; j < (arrayLength -1); j++)
             {
                   if (array[j+1] > array[j])      // ascending order simply changes to <
                  { 
                        temp = array[j];             // swap elements
                        array[j] = array[j+1];
                        array[j+1] = temp;
                        flag = 1;               // indicates that a swap occurred.
                   }
              }
         }
         return;   //arrays are passed to functions by address; nothing is returned
    }
    //END: BOUBBLESORT
    
    //EXCHANGESORT
    template <class T>
    void exchange_sort(T &array, int sz)
    {
         int i, j;
         int temp;   // holding variable
         int arrayLength = sz; 
         for (i=0; i< (arrayLength -1); i++)    // to represent element to be compared
        {
              for(j = (i+1); j < arrayLength; j++)   // to represent the rest of the elements
             {
                    if (array[i] < array[j])
                   {
                            temp= array[i];          // swap
                            array[i] = array[j];
                            array[j] = temp;
                   }
              }
         }
         return;
    }
    //END: EXCHANGESORT
    
    //SELECTIONSORT
    template <class T>
    void selection_sort(T &array, int sz)
    {
          int i, j, first, temp;
          int array_size = sz;
          for (i= array_size - 1; i > 0; i--)
         {
               first = 0;                 // initialize first to the subscript of the first element
               for (j=1; j<=i; j++)   //Find smallest element between the positions 1 and i.
              {
                     if (array[j] < array[first])
                     first = j;
              }
             temp = array[first];   // Swap smallest element found with one in position i.
             array[first] = array[i];
             array[i] = temp;
         }
         return;
    }
    //END: SELECTIONSORT
    
    //INSERTIONSORT
    template <class T>
    void insertion_sort(T &array, int sz)
    {
         int i, j, key, array_length=sz;
         for(j = 1; j < array_length; j++)    //Notice starting with 1 (not 0)
        {
               key = array[j];
               for(i = j - 1; (i >= 0) && (array[i] < key); i--)   //Move smaller values up one position
              {
                     array[i+1] = array[i];
              }
             array[i+1] = key;    //Insert key into proper position
         }
         return;
    }
    //END: INSERTIONSORT
    
    //SHELLSORT
    template <class T>
    void shell_sort(T &array, int sz)
    {
         int flag = 1, d = sz, i, temp, arrayLength = sz;
         while( flag || (d>1))      // boolean flag (true when not equal to 0)
         {
              flag = 0;           // reset flag to 0 to check for future swaps
             d = (d+1) / 2;
             for (i = 0; i < (arrayLength - d); i++)
            {
                   if (array[i + d] > array[i])
                  {
                          temp = array[i + d];      // swap items at positions i+d and d
                          array[i + d] = array[i];
                          array[i] = temp;
                          flag = 1;                  // indicate that a swap has occurred
                  }
             }
         }
         return;
    }
    //END: SHELLSORT
    
    template <class T>
    void printArray(T ar[], int sz)
    // prints array ar of size sz
    {
        for(int i=0; i<sz; i++)
            cout << ar[i] << "\t";
        cout << endl;
    } // end printArray() ////////////////
    
    int main()
    {
       int SIZE = 10000;
       vector<int> v(SIZE);
       vector<int> temp;
       srand(time(0));
    
       for(int i=0; i<SIZE; i++)
        v[i]=rand()%SIZE+1;
    
       temp=v;
    
    //   printArray(v.begin(), SIZE);
    //   quicksort(v, 0, 7);
    //   shell_sort(v, SIZE);
    //   printArray(v.begin(), 8);
    //   printArray(temp.begin(), 8);
    
       double start, end;
    
       start = GetTickCount();
       quicksort(v, 0, SIZE);
       end = GetTickCount();
       cout<<"Quick Sort: "<<(end-start)<<" ms"<<"\n";
    
       v=temp;
       start = GetTickCount();
       bubble_sort(v, SIZE);
       end = GetTickCount();
       cout<<"Bubble Sort: "<<(end-start)<<" ms"<<"\n";
    
       v=temp;
       start = GetTickCount();
       exchange_sort(v, SIZE);
       end = GetTickCount();
       cout<<"Exchange Sort: "<<(end-start)<<" ms"<<"\n";
    
       v=temp;
       start = GetTickCount();
       selection_sort(v, SIZE);
       end = GetTickCount();
       cout<<"Selection Sort: "<<(end-start)<<" ms"<<"\n";
    
       v=temp;
       start = GetTickCount();
       insertion_sort(v, SIZE);
       end = GetTickCount();
       cout<<"Insertion Sort: "<<(end-start)<<" ms"<<"\n";
    
       v=temp;
       start = GetTickCount();
       shell_sort(v, SIZE);
       end = GetTickCount();
       cout<<"Shell Sort: "<<(end-start)<<" ms"<<"\n";
    
       cin.get();
       return (0);
    } // end main() ///////////////////////////


    Kto mi powie gdzie jest błąd i czemu po zakończeniu się wykłada??
  • #8 2286397
    krzysztof21
    Poziom 11  
    Posty: 18
    niewiem czy te pytanie było do mnie ale ja np. nie moge go uruchomić bo wyglda na to że nie mam takich bibliotek a propo ten pomysł z czasem systemowym jest ciekawy ale nie wiem jak to zrobić .
  • #9 2289013
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38801
    Pomógł: 3174
    Ocena: 6529
    Kod jest napisany pod Borland C++ Builder 6.0, działać działa (i jednoznacznie pokazuje dlaczego Quick Sort nazywa się tak jak się nazywa ;) ) ale przy kończeniu wysypuje się na zwalnianiu pamięci.
  • REKLAMA
  • #10 2291800
    ostrytomasz
    Poziom 25  
    Posty: 494
    Pomógł: 82
    Ocena: 218
    Pod MinGW chodzi. Trzeba tylko dodać ".h" do time i windows.
  • #11 2293147
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38801
    Pomógł: 3174
    Ocena: 6529
    Znalazłem błąd - wywołanie QuickSort powinno mieć takie argumenty:
    quicksort(v, 0, SIZE-1);

    Przykładowe wyniki dla tablicy 50000 liczb całkowitych:
    Quick Sort: 15 ms
    Bubble Sort: 22422 ms
    Exchange Sort: 16156 ms
    Selection Sort: 5594 ms
    Insertion Sort: 2969 ms
    Shell Sort: 9594 ms
  • #12 2731997
    GOWOMB
    Poziom 13  
    Posty: 86
    Pomógł: 5
    Ocena: 15
    witam

    a ja mam pytanie czy dało by się jeszcze przedstawić ile kroków wykonała kolejna z metod sortowania
  • #13 2732307
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38801
    Pomógł: 3174
    Ocena: 6529
    ...dało by się, pomyśl - to nie boli: dodaj licznik do zliczania przejść pętli i zwracaj go jako argument przekazywany przez zmienną.
  • REKLAMA
  • #14 2732482
    GOWOMB
    Poziom 13  
    Posty: 86
    Pomógł: 5
    Ocena: 15
    Fajnie tylko, że narazie 21 godziń lekcyjnych spędziłem na programowaniu w szkole i Twoja wypowiedź brzmi dla mnie dość tajemniczo niby coś tam wiem ale chyba nie dam rady. Szczerze mówiąc to nie wiem co zrobić żeby samemu wpisywać liczby do tego programu a coś takiego było by mi potrzebne bo w sobotę zaliczenie no ale jak nie będe miał zadanka to po zaliczeniu
  • #15 2732642
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38801
    Pomógł: 3174
    Ocena: 6529
    21 godzin kursu programowania i nie umiesz napisać funkcji w C++?!?
    To co ty właściwie umiesz? Nie pisz, że nie dasz rady tylko spróbuj, weź jakąś książkę / kurs programowania i poczytaj, to są całkowite podstawy.
  • #16 2733371
    rzeszutek
    Poziom 12  
    Posty: 23
    Pomógł: 2
    Ocena: 2
    Nie wiem czy Ci się to przyda ale czas możesz zmierzyć tak :
    
    #include<ctime>
    
    clock_t start = clock();
    
    ...kod...
    
    printf("Czas: %f s", double(clock()-start)/CLOCKS_PER_SEC);
    
  • #17 2733584
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38801
    Pomógł: 3174
    Ocena: 6529
    Jak byś nie zauważył to czas jest liczony a koledze GOWOMB chodziło o zliczanie kroków algorytmu.
  • #18 2734316
    And!
    Admin grupy Projektowanie
    Posty: 9061
    Pomógł: 175
    Ocena: 784
    Dodaj licznik do pętli głównej algorytmu sortującego, i zwiększaj z każdym obiegiem n++;
    Po zakończeniu zwróć wynik jako argument przekazywany przez zmienną.
    Ew możesz zadeklarować licznik jako zmienną globalną...

    Możesz sprawdzać jeszcze np. ilości porównań kluczy, ilości wymian kluczy itp. na podobnej zasadzie tyle ze dodając licznik w odpowiednim miejscu, lub w warunku.
  • #19 2734910
    GOWOMB
    Poziom 13  
    Posty: 86
    Pomógł: 5
    Ocena: 15
    coś tam pokombinowałem no i program nawet zliczał kroki ale teraz dodałem tabele do której sam wpisuje liczby i tu pojawia się problem pierwsze sortowanie trwa długo a po 10 minutach nie ma jeszcze wyników drugiego
    pewnie coś pokręciłem ale jak bym wiedział to bym nie pytał.

    poniżej kod:

    #include <iostream>
    #include <cassert>
    #include <vector>
    #include <time>
    #include <windows>
    using namespace std;
    
    //QUICKSORT
    template<class T>
    int partition(T &array, int top, int bottom)
    {
         int x = array[top];
         int i = top - 1;
         int j = bottom + 1;
         int temp;
         int a = 0;
         do
         {
               do
               {
                      j--;
               }while (x >array[j]);
    
              do
             {
                     i++;
              } while (x <array[i]);
    
              if (i < j)
             {
                     temp = array[i];    // switch elements at positions i and j
                     array[i] = array[j];
                     array[j] = temp;
                     a++;
             }
         }while (i < j);
         return j;           // returns middle index
    }
    
    template<class T>
    void quicksort(T &array, int top, int bottom)
    {
          // top = subscript of beginning of vector being considered
          // bottom = subscript of end of vector being considered
          // this process uses recursion - the process of calling itself
         int middle;
         if (top < bottom)
        {
              middle = partition(array, top, bottom);
              quicksort(array, top, middle);   // sort top partition
              quicksort(array, middle+1, bottom);    // sort bottom partition
         }
         return;
    }
    //END: QUICKSORT
    
    //BOUBBLESORT
    template<class T>
    void bubble_sort(T &array, int sz)
    {
          int i, j, flag = 1;    // set flag to 1 to begin initial pass
          int temp;             // holding variable
          int arrayLength = sz;
          int b = 0;
          for(i = 1; (i <= arrayLength) && flag; i++)
         {
              flag = 0;
              for (j=0; j < (arrayLength -1); j++)
             {
                   if (array[j+1] > array[j])      // ascending order simply changes to <
                  {
                        temp = array[j];             // swap elements
                        array[j] = array[j+1];
                        array[j+1] = temp;
                        flag = 1;               // indicates that a swap occurred.
                        b++;
                   }
              }
         }
         return;   //arrays are passed to functions by address; nothing is returned
    }
    //END: BOUBBLESORT
    
    //EXCHANGESORT
    template <class T>
    void exchange_sort(T &array, int sz)
    {
         int i, j;
         int temp;   // holding variable
         int arrayLength = sz;
         int c = 0;
         for (i=0; i< (arrayLength -1); i++)    // to represent element to be compared
        {
              for(j = (i+1); j < arrayLength; j++)   // to represent the rest of the elements
             {
                    if (array[i] < array[j])
                   {
                            temp= array[i];          // swap
                            array[i] = array[j];
                            array[j] = temp;
                            c++;
                   }
              }
         }
         return;
    }
    //END: EXCHANGESORT
    
    //SELECTIONSORT
    template <class T>
    void selection_sort(T &array, int sz)
    {
          int i, j, first, temp;
          int array_size = sz;
          int d = 0;
          for (i= array_size - 1; i > 0; i--)
         {
               first = 0;                 // initialize first to the subscript of the first element
               for (j=1; j<=i; j++)   //Find smallest element between the positions 1 and i.
              {
                     if (array[j] < array[first])
                     first = j;
                     d++;
              }
             temp = array[first];   // Swap smallest element found with one in position i.
             array[first] = array[i];
             array[i] = temp;
         }
         return;
    }
    //END: SELECTIONSORT
    
    //INSERTIONSORT
    template <class T>
    void insertion_sort(T &array, int sz)
    {
         int i, j, key, array_length=sz;
         int e = 0;
         for(j = 1; j < array_length; j++)    //Notice starting with 1 (not 0)
        {
               key = array[j];
               for(i = j - 1; (i >= 0) && (array[i] < key); i--)   //Move smaller values up one position
              {
                     array[i+1] = array[i];
                     e++;
              }
             array[i+1] = key;    //Insert key into proper position
         }
         return;
    }
    //END: INSERTIONSORT
    
    //SHELLSORT
    template <class T>
    void shell_sort(T &array, int sz)
    {
         int flag = 1, d = sz, i, temp, arrayLength = sz;
         int f = 0;
         while( flag || (d>1))      // boolean flag (true when not equal to 0)
         {
              flag = 0;           // reset flag to 0 to check for future swaps
             d = (d+1) / 2;
             for (i = 0; i < (arrayLength - d); i++)
            {
                   if (array[i + d] > array[i])
                  {
                          temp = array[i + d];      // swap items at positions i+d and d
                          array[i + d] = array[i];
                          array[i] = temp;
                          flag = 1;                  // indicate that a swap has occurred
                          f++;
                  }
             }
         }
         return;
    }
    //END: SHELLSORT
    
    template <class T>
    void printArray(T ar[], int sz)
    // prints array ar of size sz
    {
        for(int i=0; i<sz; i++)
            cout << ar[i] << "\t";
        cout << endl;
    } // end printArray() ////////////////
    
    
    
    int main(int argc, char *argv[])
    {int T[10];
      int i, a, b, c, d, e, f;
    for(i=0;i<10;i++)
    {       printf("podaj liczbe: ");
    	scanf("%d", &T[i]);
    }
       int SIZE = T[10];
       vector<int> v(SIZE);
       vector<int> temp;
       srand(time(0));
    
       for(int i=0; i<SIZE; i++)
        v[i]=rand()%SIZE+1;
    
       temp=v;
    
    //   printArray(v.begin(), SIZE);
    //   quicksort(v, 0, 7);
    //   shell_sort(v, SIZE);
    //   printArray(v.begin(), 8);
    //   printArray(temp.begin(), 8);
    
       double start, end;
    
       start = GetTickCount();
       quicksort(v, 0, SIZE - 1);
       end = GetTickCount();
       cout<<"Quick Sort: "<<(end-start)<<" ms"<<"\n";
       printf("Step: %d", a);
    
       v=temp;
       start = GetTickCount();
       bubble_sort(v, SIZE);
       end = GetTickCount();
       cout<<"Bubble Sort: "<<(end-start)<<" ms"<<"\n";
       printf("Step: %d", b);
    
       v=temp;
       start = GetTickCount();
       exchange_sort(v, SIZE);
       end = GetTickCount();
       cout<<"Exchange Sort: "<<(end-start)<<" ms"<<"\n";
       printf("Step: %d", c);
    
       v=temp;
       start = GetTickCount();
       selection_sort(v, SIZE);
       end = GetTickCount();
       cout<<"Selection Sort: "<<(end-start)<<" ms"<<"\n";
       printf("Step: %d", d);
    
       v=temp;
       start = GetTickCount();
       insertion_sort(v, SIZE);
       end = GetTickCount();
       cout<<"Insertion Sort: "<<(end-start)<<" ms"<<"\n";
       printf("Step: %d", e);
    
       v=temp;
       start = GetTickCount();
       shell_sort(v, SIZE);
       end = GetTickCount();
       cout<<"Shell Sort: "<<(end-start)<<" ms"<<"\n";
       printf("Step: %d", f);
    
       cin.get();
       return (0);
    } // end main()
    Moderowany przez Light-I:

    Kod ujęto w tagi [code][/code].

  • #21 2735457
    GOWOMB
    Poziom 13  
    Posty: 86
    Pomógł: 5
    Ocena: 15
    Dzięki wielkie And! zrobiłem jak powiedziałeś i wszystko działa jak należy.
    Mam jednak jeszcze jedno pytanie nie jest to takie ważne ale jednak zapytam. Czy da się użyć mniejszej jednostki niż [ms] bo o ile przy sortowaniu tablicy 10000 elementowej były jakieś wyniki to przy 10 elementowej nic się nie pojawia no oczywiście poza ilością kroków.

    Jeszcze raz Wielkie Dzięki!
  • #22 2735543
    And!
    Admin grupy Projektowanie
    Posty: 9061
    Pomógł: 175
    Ocena: 784
    Dla GetTickCount(); 1ms jest minimum, lepiej odwzorować liczbę obiegów pętli porównań kluczy wymian kluczy itp. Czas będzie zależał od obciążenia i rodzaju systemu.

    Jest funkcja alternatywna dla GetTickCount() zwracajająca double ( o ile pamiętam) jak ktoś ją pamięta to może przypomnie. (z tym że nie wiem jak często jest ta zmienna inkrementowana, w każdym razie zwracała czas w wyższej rozdzielczości).

    -- acha już pamiętam

    QueryPerformanceCounter()
    oraz
    QueryPerformanceFrequency()

    Trochę się z nimi pomęczysz ale mają mniejszy okres inkrementacji.
    W razie problemów możesz uznać że wyniki są w jakichś bliżej nie określonych jednostkach niemianowanych (np. koszt :) )

Podsumowanie tematu

✨ Dyskusja dotyczyła sposobów mierzenia czasu sortowania różnych algorytmów (np. quicksort) w C++. Podkreślono, że czas sortowania zależy od rozkładu i rodzaju danych oraz wybranych algorytmów. Zaproponowano prostą metodę pomiaru czasu za pomocą odczytu czasu systemowego przed i po sortowaniu, wykorzystując funkcję clock() z biblioteki . Przykładowo przedstawiono kod implementujący quicksort oraz inne algorytmy sortujące wraz z pomiarem czasu ich działania. Omówiono także możliwość zliczania kroków algorytmu (np. liczby porównań i wymian) przez dodanie liczników w pętlach. Wskazano, że standardowa rozdzielczość pomiaru czasu w milisekundach może być niewystarczająca dla małych zbiorów, dlatego zaproponowano użycie funkcji Windows API: QueryPerformanceCounter() i QueryPerformanceFrequency() dla wyższej precyzji pomiaru. Dyskusja zawierała także uwagi dotyczące kompatybilności kodu z różnymi kompilatorami (Borland C++ Builder 6.0, MinGW) oraz poprawki w wywołaniu funkcji sortujących i przekazywaniu tablic.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA