Witam,
Walczę od pewnego czasu z programem do pomiaru czasów różnych wersji sortowania w zależności od typu danych wejściowych. I z uwagi na to, że wychodziły mi bardzo nierówne dziwne pomiary, chcę zrobić jeden program, który będzie dla wszystkich typów tablicy wejściowej wykonywał pomiary.
Na razie jestem w połowie i mam coś takiego:
#include <cmath>
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <time.h>
using namespace std;
long czas()
{
static clock_t start=0;
clock_t teraz=clock();
long wynik=((1000*(teraz-start)+(CLOCKS_PER_SEC>>1))/CLOCKS_PER_SEC);
start=teraz;
return wynik;
}
int main()
{
cout<<"Selection sort\n";
cout<<"Kolejnosc losowa\n";
int N;
for (N=10000; N<=310000; N=N+20000)
{ int d[N], j, i, min;
srand((unsigned)time(NULL));
for(i = 0; i < N; i++) d[i] = rand() % 100;
// for(i = 0; i < N; i++) cout << setw(4) << d[i];
//cout << endl;
czas();
for (j=0; j<N-1; j++)
{
d[min]=d[j];
for (i=j+1; i<N; i++)
if (d[i]<d[min]) min=i;
swap(d[min], d[j]);
}
// for (i=0; i<N; i++) cout<<setw(4)<<d[i]; cout<<endl;
printf("Czas wykonywania dla %d elementow : %lu ms \n", N, czas());
for(unsigned long int i=0;i<N;i++) d[i]='\0';
}
{ cout<<"Kolejnosc uporzadkowana rosnaca\n";
int Z;
{ int d[Z], j, i, min;
for (Z=10000; Z<=310000; Z=Z+20000)
{ for(i = 0; i < Z; i++) d[i] = i+1;
//for(i = 0; i < Z; i++) cout << setw(4) << d[i];
//cout << endl;
czas();
for (j=0; j<Z-1; j++)
{
d[min]=d[j];
for (i=j+1; i<Z; i++)
if (d[i]<d[min]) min=i;
swap(d[min], d[j]);
}
//for (i=0; i<Z; i++) cout<<setw(4)<<d[i]; cout<<endl;
printf("Czas wykonywania dla %d elementow : %lu ms \n", Z, czas());
for(unsigned long int i=0;i<Z;i++) d[i]='\0';
}
}
}
system("PAUSE");
return 0;
}
Założenie jest takie: dla kolejnych rozmiarów tablicy najpierw podaje czas sortowania przy kolejnosci losowej, potem przy juz posortowanej... Do tego chcę dorzucić jeszcze kilka wersji tablicy i potem to sobie odpalić, żeby mi ładnie wszystkie czasy pomierzyło.
Jednak mam problem: czasem program działa, czasem się wiesza już na etapie kolejności losowej, czasem przechodzi całą losową, ale wiesza się przy posortowanym itd itp. Nie chcę go dalej rozwijać, póki nie ogarnę tej części, ale nie potrafię pojąć, czemu raz działa raz nie, wieszając się na różnych etapach...
Jestem dość początkująca dlatego wszystkie rady są mile widziane :)