Sunteți pe pagina 1din 6

Ministerul Educaţiei, Culturii și Cercetării al Republicii Moldova

Academia de Studii Economice a Moldovei

Facultatea: “Tehnologii Informationale și Statistică Economică”


Disciplina: “Structuri de date și Algoritmi”

RAPORT
Lucrare de laborator nr. 3

Efectuat : Tozlovan Roman


Controlat : Tutunaru Sergiu
Grupa : INFa-223

Chișinău 2023
Sarcina 1 : Să se elaboreze un program pentru sortarea ,, HeapSort ” :
Codul programului ( C++ ) :
#include <iostream>
#include <time.h>
#include <stdlib.h>

using namespace std;

// “heapify” este subarborele inradacinat cu nodul i (index al arr[])


// n - lungimea sirului
void heapify(int tab[], int n, int i)
{
int rad = i; // Initializez cel mai mare element ca radacina
int s = 2 * i + 1; // Stang = 2*i + 1
int d = 2 * i + 2; // Drept = 2*i + 2

// Daca copilul stang este mai mare decât radacina:


if (s < n && tab[s] > tab[rad])
rad = s;

// Daca copilul drept este mai mare ca cel mai mare pana la el:
if (d < n && tab[d] > tab[rad])
rad = d;

// Daca cel mai mare numar nu este radacina:


if (rad != i) {
swap(tab[i], tab[rad]);

heapify(tab, n, rad);
}
}
// functia principala pentru heapSort:
void heapSort(int tab[], int n)
{
// Construim heap:
for (int i = n / 2 - 1; i >= 0; i--)
heapify(tab, n, i);

// Extragem unul cate unul fiecare element din heap:


for (int i = n - 1; i > 0; i--) {

// Mutam radacina curenta la sfarsit:


swap(tab[0], tab[i]);

// Apelam max heapify pe heap redus:


heapify(tab, i, 0);
}
}

// Functia pentru a printa rezultatul:


void print(int arr[], int n)
{
for (int i = 0; i < n; ++i)
cout << arr[i] << "\t";
cout << "\n";
}

int main()
{
int n = 0;
cout << "Setează mărimea tabloului unidimensional: "; cin >> n;
int tab[n];
srand(time(NULL));
for( int i = 0 ; i < n; i++ ){
tab[i] = rand() % 100;
}
cout << "Tabloul initial: \n";
for( int i = 0; i < n; i++ ){
cout << tab[i] << "\t";
}

heapSort(tab, n);

cout << "\nTablou sortat (HeapSort):\n";


print(tab, n);
}

Rezultat / output :

Sarcina 2 : Să se elaboreze un program pentru sortarea ,, Quick Sort ” :


Codul Programului :
#include <iostream>
using namespace std;
void swap(int arr[] , int pos1, int pos2){
int temp;
temp = arr[pos1];
arr[pos1] = arr[pos2];
arr[pos2] = temp;
}
int partition(int arr[], int low, int high, int pivot){
int i = low;
int j = low;
while( i <= high){
if(arr[i] > pivot){
i++;
}
else{
swap(arr,i,j);
i++;
j++;
}
}
return j-1;
}
void quickSort(int arr[], int low, int high){
if(low < high){
int pivot = arr[high];
int pos = partition(arr, low, high, pivot);
quickSort(arr, low, pos-1);
quickSort(arr, pos+1, high);
}
}
int main()
{
int n ;
cout << " Setează lungimea vectorului : ";
cin>>n;
int arr[n];
for( int i = 1 ; i <= n; i++){
cout << "Setează numărul "<<i<<" din vector : ";
cin>> arr[i];
}
quickSort(arr, 1 , n);
cout<<"Vectorul Sortat: ";
for( int i = 1 ; i <= n; i++){
cout<< arr[i]<<"\t";
}
}
Rezultat / Output :

S-ar putea să vă placă și