Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
RAPORT
Lucrarea de laborator nr.6 la
Structuri de date si algoritmi
A efectuat:
st. gr. RM-201 Grosu Maxim
A verificat:
Stratulat Stefan
Chişinău 2021
Quicksort efectuează sortarea bazându-se pe o strategie divide et impera. Astfel, el împarte lista de sortat în
două subliste mai u or de sortat. șPa ii algoritmului sunt:ș
2. Se reordonează lista astfel încât toate elementele mai mici decât pivotul să fie plasate înaintea
pivotului i toate elementele mai mari să fie după pivot. După această parti ionare, pivotul se află în ș ț
pozi ia sa finală.ț
3. Se sortează recursiv sublista de elemente mai mici decât pivotul i sublista de elemente mai mari decâtș
pivotul.
int main()
{
int dimension, m = 1,comand;
float times; int
*vector = NULL;
while(1)
{ while(m)
{ m = 0;
system("cls"); fflush(stdin);
printf("Introduceti marimea vectorului (numarul de elemente) : ");
scanf("%d",&dimension);
vector = (int*)malloc(dimension * sizeof(int)); if(!
vector)
{
printf("\nMemoria nu a fost alocata! Incercati din nou.\a\n");
m = 1;
}
}
system("cls"); fflush(stdin); printf("Meniu
sortare :\n\n"); printf("[ 1 ] In ordine
crescatoare\n"); printf("[ 2 ] In ordine
descrescatoare\n\n"); printf("[ 0 ]
Exit\n\n"); printf("Comand >> ");
scanf("%d",&comand); system("cls");
switch(comand)
{
case 0 : if(vector) free(vector); return 0; break;
case 1 :
do{
system("cls"); fflush(stdin); printf("Ce
sortam??\n"); printf("[ 1 ] Un tablou deja
sortat\n"); printf("[ 2 ] Un tablou
aleatoriu\n"); printf("[ 3 ] Un tablou
sortat invers\n\n"); printf("[ 0 ]
Inapoi?\n\n"); printf("Comand >> ");
scanf("%d",&comand); system("cls");
switch(comand)
{
case 0 : break; case 1 : for(int i=0;
i<dimension; i++)
{
vector[i] = i;
}
times = clock();
printf("Sortarea sa efectuat in %f secunde si sau produs %d schimbari\n",
(clock()-
times)/CLOCKS_PER_SECqsort(vector,dimension));
system("pause"); break; case 2 :
srand(time(NULL));
for(int i=0; i<dimension; i++)
{ vector[i] = rand() % 100;
}
times = clock();
printf("Sortarea sa efectuat in %f secunde si sau produs %d schimbari\n",
(clock()-
times)/CLOCKS_PER_SEC,qsortC(vector,dimen
sion)); system("pause"); break;
case 3 : for(int i=0; i<dimension; i+
+)
{
vector[i] = dimension - i;
}
times = clock();
printf("Sortarea sa efectuat in %f secunde si sau produs %d schimbari\n",
(clock()-times)/CLOCKS_PER_SEC,qsortC(vector,dimension));
system("pause"); break;
default : printf("\aAti introdus o comanda gresita\n"); break;
}
}while(comand);
break;
case 2 :
do{
system("cls"); fflush(stdin); printf("Ce
sortam??\n"); printf("[ 1 ] Un tablou deja
sortat\n"); printf("[ 2 ] Un tablou
aleatoriu\n"); printf("[ 3 ] Un tablou
sortat invers\n\n"); printf("[ 0 ]
Inapoi?\n\n"); printf("Comand >> ");
scanf("%d",&comand); system("cls");
switch(comand)
{
case 0 : break;
case 1 :
for(int i=0; i<dimension; i++)
{
vector[i] = dimension - i;
}
times = clock();
printf("Sortarea sa efectuat in %f secunde si sau produs %d schimbari\n",
(clock()-times)/CLOCKS_PER_SEC,qsortD(vector,dimension));
system("pause"); break; case 2 :
srand(time(NULL)); for(int
i=0; i<dimension; i++)
{ vector[i] = rand() % 100;
}
times = clock();
printf("Sortarea sa efectuat in %f secunde si sau produs %d schimbari\n",
(clock()-times)/CLOCKS_PER_SEC,qsortD(vector,dimension));
system("pause");break; case 3 :
for(int i=0; i<dimension; i++)
{
vector[i] = i;
}
times = clock();
printf("Sortarea sa efectuat in %f secunde si sau produs %d schimbari\n",
(clock()-times)/CLOCKS_PER_SEC,qsortD(vector,dimension));
system("pause");break;
default : printf("\aAti introdus o comanda gresita\n");
break; }
}while(comand); break;
Concluzii: In urma acestei lucrari de laborator am ajuns la ideia ca shell sort este un
algoritm de sortare bun, insa nui asa de rapid ca qsort. Pentru sirurile deja aranjate se face
0 (zero) mutari, ceia ce ii un rezultat bun pentru viteza efectuarii. Inca un plus pentru
acest algoritm este ca nu necesita memorie adaugatoare fata de qsort.