Pomiar czasu algorytmu

0

Chce zmierzyc czas działania insertion sort jednak program wypisuje mi 0.00000. Ma ktoś pojęcie dlaczego ?
Oto Kod

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#include <time.h>
#include <windows.h>
#define NUMBEROFROWS 100
#define NUMBEROFEXP 10
void bubblesort(int[]);
void insertsor(int[]);
void selectionsort(int []);

void generujlos(int [],int);
int main(int argc, char *argv[])
{

          
           
            int size;
            int exp = 10;
              for(exp; exp <= 16;exp++)
              {      
                             
                             
                               size =  pow(2,exp);
                               int  tab[size];
                               generujlos(tab,size);
                        
                   
                         
                            printf("************************** %d \n", exp);
                         
                            }
                           
                       
                           
                         
  system("PAUSE");  
  return 0;
}



void selectionsort(int tab[])
{

    int min;
    int i =0;
    for(i;i< NUMBEROFROWS-1;i++)
        {
            min = tab[i];
           int j=i+1;
           for(j;j< NUMBEROFROWS;j++)
           {
              if(min>tab[j])
              {
                   min = tab[j];
               }

           }
               int temp = tab[i];
               tab[i] = min;
               tab[j] = temp;
        }


}

void generujlos(int tab[],int size)
{
    FILE *f;
                    srand(time(NULL));
                    int i;
                 f = fopen("c.txt", "w");
  if (f == NULL) {
    perror("Nie udalo sie otworzyc pliku 'c.dat' do zapisu");
    return ;
  }
 
  fprintf(f, "# file-output.c\n");
 
   
                 
                    for(i=0;i<size ;i++)
                       {
                           tab[i] = rand()% size;
                          printf("%d \n", tab[i]);
                       fprintf(f, "%d\n",tab[i]);

                   
                       }
                        
			  fflush(f);

			  fclose(f);
                clock_t start = clock();   
                       selectionsort(tab);
                    printf ( "%f\n", ( (double)clock() - start ) / CLOCKS_PER_SEC );   
                
                      
    
     }
 
0

Em, bo program się tak szybko wykonuje? :P

0

Zwiększ liczbę danych do sortowania 10000 krotnie.

0

juz teraz mam 2 do 16 elementów jak zwiększę jeszcze 1000 razy to wychodzi mi poza zakres zmiennej :/
Znacie może jakieś inne tricki na pomiar czasu działania algorytmu ?

0

Bo masz procesor który ma pewnie ~3GHz czyli wykonuje 3 miliardy operacji na sekundę (milion operacji na milisekundę). Licznik którego używasz ma rozdzielczość ~16ms czyli żebyś zobaczył coś więcej niż 0 (ergo własnie 16ms) musiałbyś wykonać 16 milionów operacji procesora. Każda instrukcja zabiera kilka operacji elementarnych, ale mamy pipelining i superskalarność więc możesz założyć że musiałbyś wykonać mniej więcej tyle operacji żeby coś widzieć.
Sortowanie 100 liczb selectionsortem daje ci ~n^2 operacji więc raptem 10000. Bez znacznego zwiększenia rozmiaru danych nic nie zobaczysz.

OMG co to w ogóle jest? o_O Sortujesz zawsze 100 liczb mimo że rozmiar tablicy okreslony jest za pomoca jakiejś funkcji potęgowej. Mam wrażenie że połowę tego kodu po prostu ukradłeś i go nie rozumiesz...

0

To chyba zbyt pochopnie wyciągasz wnioski....
Posądzanie kogoś o złodziejstwo to bardzo poważne oskarżenie. Licz się ze słowami
Liczyłem na rzetelną pomoc widocznie pomyliłem fora

0

Zamiast zwiększać ilość danych, możesz wykonać te sortowanie np. 100 albo 1000 razy i zmierzony czas uśrednić.

0

@Newbie1234 rzadko wyciągam pochopne wnioski. Kod jest ewidentnie złożony z 2 różnych kodów. Jeśli poprawisz go tak żeby sortować tyle liczb ile faktycznie generujesz to problemów nie będzie i czas się będzie mierzył.

0

Formatowanie jest LOSOWE, tak więc nie jeden powiedziałby, że kod kradziony.

0

Z bandą idiotów się kłócił nie będę, do zamknięcia

0
Newbie1234 napisał(a):

Z bandą idiotów się kłócił nie będę, do zamknięcia

zastanawiam się kto tu jest większym idiotą - autor tego tematu czy autor tego kodu, który wrzuciłeś. Dostałeś kilka niegłupich odpowiedzi ale zamiast podziękować nazywasz ich autorów idiotami. Brak słów.

0

@Newbie1234 ależ nikt nie każe ci się kłócić. Ale zamykać nie będziemy, ponaśmiewamy się jeszcze trochę z twojego nieudolnie ukradzionego kodu :)

0

Napisałem na Fejsbuku byś liczył cykle a nie czas. Poza tym jak już masz coś sortować to od razu dawaj z 10000.

BTW NAUCZCIE SIĘ W KOŃCU FORMATOWAĆ KOD.
Do reszty: Sorry, ale mój rok bardzo topornie przyjmuje wiedzę o stylu i formatowaniu. Uważają, że na razie się uczą i nie muszą pisać ładnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1