Documente Academic
Documente Profesional
Documente Cultură
LAb 6 SDA
LAb 6 SDA
RAPORT
Lucrarea de laborator nr.6
la Structuri de date si algoritmi
A efectuat:
st. gr. SI-151 D.Cucu
A verificat:
dr., conf.univ. M. Kulev
Chiinu 2016
Lucrarea de laborator nr.6
2. Se reordoneaz lista astfel nct toate elementele mai mici dect pivotul s fie plasate naintea
pivotului i toate elementele mai mari s fie dup pivot. Dup aceast partiionare, pivotul se afl n
poziia sa final.
3. Se sorteaz recursiv sublista de elemente mai mici dect pivotul i sublista de elemente mai mari dect
pivotul.
Pseudocod QuickSort:
O posibil implementare a algoritmului, in limbajul C sub forma unei func ii, este redat mai jos:
Codul programului
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
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,dimension));
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.
Bibliografie:
http://programmersclub.ru/01/
TOTUL DESPRE C SI C++ (MANUALUL FUNDAMENTAL DE
PROGRAMARE IN C SI C++)[RO][Kris Jamsa][Lars Kland]
Limbajul C pentru clasa a-IX-a
http://www.scribd.com/doc/41293824/Negrescu-Liviu-Limbajele-C-si-C-
pentru-incepatori-vol-1
http://devcentral.iftech.com/learning/tutorials/c-cpp/c