Mam alg sortowania (Quick Sort) i instrukcje mierzącą czas clock_t start = ((1000clock())/CLOCKS_PER_SEC); kod clock_t start = ((1000clock())/CLOCKS_PER_SEC);
Teraz pytanie, dlaczego wciąż pokazuje ze czas działania to 0ms. Dopiero przy 15 tys elementów do posortowania wyświetla 16ms, moim zdaniem to trochę za mało.
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <time.h>
using namespace std;
const int N = 15000; // Liczebność zbioru.
int d[N];
void Sortuj_szybko(int lewy, int prawy)
{
int i,j,piwot;
i = (lewy + prawy) / 2;
piwot = d[i]; d[i] = d[prawy];
for(j = i = lewy; i < prawy; i++)
if(d[i] < piwot)
{
swap(d[i], d[j]);
j++;
}
d[prawy] = d[j]; d[j] = piwot;
if(lewy < j - 1) Sortuj_szybko(lewy, j - 1);
if(j + 1 < prawy) Sortuj_szybko(j + 1, prawy);
}
// Program główny
//---------------
int main()
{
int i,timer;
srand((unsigned)time(NULL));
cout << " Sortowanie szybkie\n"
"Przed sortowaniem:\n\n";
for(i = 0; i < N; i++) d[i] = rand() % 100;
for(i = 0; i < N; i++) cout << setw(4) << d[i];
cout << endl;
// Sortujemy
clock_t start = ((1000*clock())/CLOCKS_PER_SEC);
Sortuj_szybko(0,N - 1);
timer=clock()-start;
// Wyświetlamy
cout << "Po sortowaniu:\n\n";
for(i = 0; i < N; i++) cout << setw(4) << d[i];
cout << endl;
printf( "Czas wykonywania: %lu ms\n",timer);
system("PAUSE");
return EXIT_SUCCESS;
}
Mam jeszcze taką instrukcje
LONGLONG Frequency, CurrentTime, LastTime;
double TimeScale;
QueryPerformanceFrequency( (LARGE_INTEGER*) &Frequency);
TimeScale = (1.0/Frequency)*1000.0;
QueryPerformanceCounter( (LARGE_INTEGER*) &LastTime);
kod
QueryPerformanceCounter( (LARGE_INTEGER*) &CurrentTime);
double milisec = (CurrentTime-LastTime)*TimeScale;
printf(" %.4fms.",milisec);
i tutaj przy 5000 pokazuje ok 1.5000 Tyle, że nie wiem w jakiej jednostce to liczy no i czy poprawnie jest to napisane.