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

Konferencja JOIN! 2018
0 głosów
249 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 (146,720 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 144 wizyt
pytanie zadane 18 kwietnia w C i C++ przez kikosiak Użytkownik (960 p.)
0 głosów
1 odpowiedź 176 wizyt
+1 głos
2 odpowiedzi 87 wizyt
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

55,341 zapytań

99,683 odpowiedzi

205,114 komentarzy

27,277 pasjonatów

Przeglądających: 383
Pasjonatów: 22 Gości: 361

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.

...