• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kurs c++ odc. 14, pomiar czasu.

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
3,441 wizyt
pytanie zadane 30 października 2017 w C i C++ przez Haker2004 Użytkownik (590 p.)
edycja 30 października 2017 przez Eryk Andrzejewski

Witam, mam problem ze zmierzeniem czasu w metodzie buble sort. Oto kod:

#include <iostream>
#include <time.h>
#include <windows.h>

using namespace std;

int ile;
clock_t start, stop;
double czas;

void sortowanie(int *tab, int n)
{
    for(int i=1; i<n; i++)
    {
        for(int j=n-1; j>=1; i--)
        {
            if(tab[j]<tab[j-1])
            {
                int bufor;
                bufor=tab[j-1];
                tab[j-1]=tab[j];
                tab[j]=bufor;
            }
        }
    }
}

       int main()
{
    cout << "Poruwnanie czasu sortowania v.1" << endl;

    cout << "Ile losowyh liczb w tablicy:" << endl;
    cin >> ile;

    //dynamiczna alokacja tablicy
    int *tablica;
    tablica=new int [ile];

    srand(time(NULL));

    for(int i=0; i<ile; i++)
    {
        tablica[i] = rand()%100000+1;
        //cout<<tablica[i]<<" ";
    }

    cout << "Sortuje teraz babelkowo, prosze czekac!" <<endl;

    start = clock();

    sortowanie(tablica,ile);

    stop = clock();

    czas = (double)(start-stop) / CLOCKS_PER_SEC;


    cout << "Czas sortowania babelkowego: " << czas << " s "  <<endl;

    delete [] tablica;
    return 0;
}

Gdzie tu jest błąd?

1 odpowiedź

+1 głos
odpowiedź 30 października 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
for(int j=n-1; j>=1; i--)

Zamień i-- na j--.

I nie używaj windows.h, szczególnie gdy nie masz ku temu powodu (jak w tym przypadku). Nie używaj zmiennych globalnych. Nie używaj (a już na pewno nie globalnie) dyrektywy using (using namespace...). I wypadałoby też użyć jakiegoś gotowego kontenera z STL (np. std::vector, std::array) zamiast gołej dynamicznej alokacji danych. Zamiast castów w stylu C lepiej używać tych z C++: static_cast<>() i tak dalej.

bufor=tab[j-1];
tab[j-1]=tab[j];
tab[j]=bufor;

Nie lepiej użyć std::swap()?

No i zamiast clock() poleciłbym std::chrono smiley

I masz jeszcze ujemny wynik. Zamień:

czas = (double)(start-stop) / CLOCKS_PER_SEC;

na

czas = (double)(stop-start) / CLOCKS_PER_SEC;

 

komentarz 30 października 2017 przez Haker2004 Użytkownik (590 p.)
Dzięki tylko nie wiem co to jest STL i reszta tego wszystkiego po prostu się dopiero uczę.

Podobne pytania

+1 głos
3 odpowiedzi 1,406 wizyt
pytanie zadane 18 kwietnia 2018 w C i C++ przez kikosiak Obywatel (1,010 p.)
0 głosów
2 odpowiedzi 788 wizyt
pytanie zadane 13 grudnia 2019 w C i C++ przez Zydu Początkujący (340 p.)
+1 głos
1 odpowiedź 314 wizyt
pytanie zadane 6 kwietnia 2022 w C# przez jakubmarek Nowicjusz (160 p.)

93,103 zapytań

142,077 odpowiedzi

321,569 komentarzy

62,445 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...