Mutiny Temat założony przez niniejszego użytkownika |
Mierzenie czasu wykonywania algorytmu » 2014-06-02 21:59:24 Witam, chcę zmierzyć czas sortowania dwóch tablic ale coś chyba jest nie tak, mam na myśli czas pokazywany, jest stanowczo za krótki. Będę wdzięczny za pomoc #include <stdio.h> #include <time.h> int n = 20000; int tab[ 20000 ]; int tab2[ 20000 ]; void wypelnij() { int i = 0; for( i = 0; i < n; i++ ) { tab[ i ] = rand(); tab2[ i ] = tab[ i ]; } } int bubble( int tab2[], int n ); void Sortuj_szybko( int lewy, int prawy ); int main() { clock_t start; clock_t end1; clock_t start2; clock_t end2; wypelnij(); start = clock(); Sortuj_szybko( 0, n - 1 ); end1 = clock(); start2 = clock(); bubble( tab, n ); end2 = clock(); printf( "czas szybkiego %ld",( end1 - start ) ); printf( "czas babelkowoego %ld",( end2 - start2 ) ); }
|
|
PaSaSaP |
» 2014-06-02 22:31:51 20000 elementów to nie jest tak dużo elementów jak na dzisiejsze komputery. Dla 20 milionów elementów spróbuj. Inna sprawa, to styl, w jakim piszesz, nie podoba mi się. Zmienne globalne nie są dobrym rozwiązaniem. Wartość, która jest stała przez cały czas działania programu możesz zdefiniować dyrektywą define, np.: #define ROZMIAR 20000. |
|
Mutiny Temat założony przez niniejszego użytkownika |
» 2014-06-02 23:30:43 Mój błąd nie napisałem jak za mało, mianowicie : 3 Za to samo wypisanie tej tablicy daje nam czas około 1000. Co do samej maniery pisania, uczę się i dziękuję za porady :) Skoro w programie nie modyfikuje i tak zmiennej n długość, to pisanie define tudzież const int ma jakiś cel poza trzymaniem się konwencji, że stałe mają być stałe ? http://i.imgur.com/YOcIsnf.png fotka z tym co dostajemy w konsoli Wersja po poprawkach sugerowanych : #include <stdio.h> #include <time.h> #include <stdlib.h> const int n = 20000;
int bubble( int tab2[], int n ); void Sortuj_szybko( int lewy, int prawy, int tab[] ); int main() { int tab[ 20000 ]; int tab2[ 20000 ]; int j = 0; for( j = 0; j < n; j++ ) { tab[ j ] = rand(); tab2[ j ] = tab[ j ]; } clock_t start; clock_t end; clock_t start2; clock_t end2; clock_t start3; clock_t end3; start = clock(); Sortuj_szybko( 0, n - 1, tab ); end = clock(); start2 = clock(); bubble( tab2, n ); end2 = clock(); int i = 0; start3 = clock(); for( i = 0; i < n; i++ ) { printf( "%d\n", tab[ i ] ); } end3 = clock(); printf( "czas szybkiego %ld",( end - start ) ); printf( "czas babelkowoego %ld",( end2 - start2 ) ); printf( "czas wypisania posortowanej tablicy %ld",( end3 - start3 ) ); return( 0 ); }
|
|
Mutiny Temat założony przez niniejszego użytkownika |
» 2014-06-03 15:59:57 Edit: chyba jednak tak musi być, pod linuxem to samo odpaliłem i wyniki inne - większe liczby spoooro, wcześniej używałem clock() właśnie na linuxie i dla tego się dziwiłem, ale wciąż zastanawia mnie czemu wypisanie na ekran to 1000 a sortowanie szybkie 3 przy 20000 elementów. Czyżby wypisywanie było tak zajmujące dla procesora ? |
|
pekfos |
» 2014-06-03 22:46:03 clock() nie musi dawać żadnej konkretnej jednostki, więc skąd wiecie, czy n to dużo, czy mało..? Co do 3, a 1000, to może być wina kodu i tego, że skompilowany program nie musi być dosłowną realizacją kodu. |
|
« 1 » |