• 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.

0 głosów
197 wizyt
pytanie zadane 30 października 2017 w C i C++ przez Haker2004 Użytkownik (570 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 VIP (144,520 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 (570 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 130 wizyt
pytanie zadane 18 kwietnia w C i C++ przez kikosiak Użytkownik (920 p.)
0 głosów
1 odpowiedź 156 wizyt
+1 głos
2 odpowiedzi 82 wizyt
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

53,116 zapytań

96,375 odpowiedzi

197,331 komentarzy

25,940 pasjonatów

Przeglądających: 249
Pasjonatów: 25 Gości: 224

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...