• 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
168 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 (141,040 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 119 wizyt
pytanie zadane 18 kwietnia w C i C++ przez kikosiak Użytkownik (840 p.)
0 głosów
1 odpowiedź 137 wizyt
+1 głos
2 odpowiedzi 80 wizyt
Oferty pracy dla początkujących programistów na portalu No Fluff Jobs
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

49,832 zapytań

91,793 odpowiedzi

185,495 komentarzy

24,245 pasjonatów

Przeglądających: 325
Pasjonatów: 22 Gości: 303

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.

...