Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrarea de laborator nr. 6
La Structuri de Date și Algoritmi
A efectuat:
st. gr. CR-211 Bivol Vasile
A verificat:
dr., conf. univ. Mihail Kulev
Chişinău -2022
Lucrare de Laborator nr 6
Tema:
Analiza empirică a algoritmilor de sortare și de căutare
Scopul lucrării:
Studierea posibilităţilor şi mijloacelor limbajului C de programare a algoritmilor de sortare și de
căutare pentru tablouri unidimensionale și obținerea deprinderilor de analiză empirică a
algoritmilor.
Condiţia problemei (sarcina de lucru):
Să se scrie un program în limbajul C pentru analiza empirică a algoritmului
propus (după variantă) cu crearea funcţiei de căutare sau sortare pentru tabloul
unidimensional de n elemente cu afişarea la ecran a următorului meniu de opţiuni:
1. Tabloul demonstrativ de n elemente (5<= n <=20).
2. Tabloul cu valori aleatorii (n=10000, n=100000, n=1000000).
3. Tabloul sortat crescător (n=10000, n=100000, n=1000000).
4. Tabloul sortat descrescător (n=10000, n=100000, n=1000000).
5. Analiza empirică a funcției de sortare qsort() sau a funcției de căutare bsearch()
din biblioteca standard a limbajului C.
0. Ieșire din program.
Analiza empirică a algoritmului constă în: a) determinarea timpului de rulare,
numărului de comparații, numărului de schimbări (sau deplasări) de elemente
pentru tablouri cu 3 diferite seturi de valori și cu 3 diferite volume de elemente; b)
compararea și analiza rezultatelor obținute uilizând funcția creată și funcția din
biblioteca standard a limbajului C; c) tragerea concluziilor.
Varianta :
3. Sortare bulelor în ordine ascendentă.
Mersul lucrării:
int main()
{
int nm, i, key = 20;
long n;
long times;
int *A = NULL, *B = NULL;
printf("\t\tMenu:\n");
printf(" 1. Tablou demonstrativ \n");
printf(" 2. Tablou cu valorii
aleatorii(n=1000,n=10000,n=100000) \n");
printf(" 3. Sortarea tabloului
crescator(n=1000,n=10000,n=100000) \n");
printf(" 4. Sortarea tabloului descrescator
(n=1000,n=10000,n=100000) \n");
printf(" 5. Analiza empirica a functiei de sortare \n");
printf(" 0. Exit \n ");
while(1)
{
printf("\n\t Optiunea: ");
scanf("%d",&nm);
switch(nm)
{
case 1:
{
printf("\t\tTablou Demonstrativ: \n");
srand(time(NULL));
printf("\n");
afis(n,A);
times = clock();
insertionc(B,n);
times = clock() - times;
printf("Timpul de efectuare: %ld secunde Comparatii:
%lld Schimbari:%lld ;\n",
times/CLOCKS_PER_SEC,comparatii,schimbari);
free(B);
n *= 10;
}
break;
}
case 4:
{
{
n = 1000;
while(n != 1000000)
{
printf("N = %d\n",n);
B = randomTab(n);
times = clock();
insertiond(B,n);
int i, j, aux;
for (i = 1; i < n; i++)
{
j = i;
while(j > 0)
{
comparatii++;
if(a[j - 1] > a[j])
{
aux = a[j];
a[j] = a[j - 1];
a[j - 1] = aux;
schimbari++;
}
j--;
}
}
}
int i, j, aux;
for (i = 1; i < n; i++)
{
j = i;
while(j > 0)
{
comparatii++;
if(a[j - 1] < a[j])
{
aux = a[j];
a[j] = a[j - 1];
a[j - 1] = aux;
schimbari++;
}
j--;
}
}
}
int* randomTab(int n)
{
srand(time(NULL));
int *tab = (int *)malloc(n * sizeof(int));
if(!tab)
{
printf("\n Memoria nu a fost alocata \n");
}
else
{
for(int i = 0; i < n; i++)
{
tab[i] = rand() % 20;
}
}
return tab;
}
1. Programul dat a avut o strcutură asemănătoare cu cel din lucrarea de laborator trecută,
ceea ce a permis iar împărțirea codului în trei părți și economisirea locului.
2. Mulțumită implementării header-ului și a funcțiilor în main a fost posibilă folosirea unui
document cu mult mai scurt, comparative cu cel din laboratorul numărul 6.
Bibliografie:
1. https://else.fcim.utm.md/mod/assign/view.php?id=32769
2. https://else.fcim.utm.md/course/view.php?id=379
3. https://www.coursehero.com/file/p4l8ln5q/%C8%99i-de-utilizare-a-tipului-abstract-
de-date-TAD-Arbore-binar-cu-asigurarea/
4. http://repository.utm.md/bitstream/handle/5014/15229/
ProgramareaCalculatoarelor_StructuriDateAlgoritmi_C_DS.pdf?sequence=1
5. http://www.cs.ubbcluj.ro/~gabis/fp/Documentatii/TAD.pdf
6. https://else.fcim.utm.md/mod/assign/view.php?id=32768