Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Chişinău 2018
Cuprins
Cuprins ................................................................................................................................................. 1
Scopul și obiectivele lucrării ................................................................................................................ 3
Sarcina .................................................................................................................................................. 4
Mersul lucrării ...................................................................................................................................... 5
Analiza algoritmilor ............................................................................ Error! Bookmark not defined.
Concluzii............................................................................................................................................. 13
Anexa A .............................................................................................................................................. 14
Scopul și obiectivele lucrării
Să se determine numărul de iterații pentru n=10, n=100, n=1000, n=10000, n=100000 la sortarea unui
tablou în ordine crescătoare prin 3 metode(Mergesort, Quicksort, Mysort). Să fie luate în considerație
3 cazuri: favorabil, nefavorabil și random.
Mersul lucrării
1) Metoda MergeSort
Algoritmul merge sort execută următorii pași
1. Dacă lista este de lungime 0 sau 1, atunci este deja sortată. Altfel:
2. Împarte lista nesortată în două subliste aproximativ egale.
3. Sortează fiecare sublistă recursiv prin reaplicarea algoritmului merge sort.
4. Se interclasează cele două liste și se obține lista inițială sortată.
MergeSort mai este denumit și algoritm de sortare prin interclasare , care are complexitatea
O(n*log n)
int Left = m - l + 1;
int Right = r - m;
i = 0;
j = 0;
k = l;
{
if (subArrayLeft[i] <= subArrayRight[j])
arr[k] = subArrayLeft[i];
i++;
else
arr[k] = subArrayRight[j];
j++;
k++;
arr[k] = subArrayLeft[i];
i++;
k++;
arr[k] = subArrayRight[j];
j++;
k++;
}
void mergeSort(int arr[], int l, int r)
it2++;
if (l < r)
int m = l+(r-l)/2;
mergeSort(arr, l, m);
merge(arr, l, m, r);
}
2) Metoda QuickSort
int j;
i++;
swap(&arr[i], &arr[j]);
return (i + 1);
contor1++;
quickSort(arr2, low, pi - 1);
quickSort(arr2, pi + 1, high);
}}
3) Metoda BubbleSort
void bubble_sort(int arr[], int num) {
while (swapped) {
swapped = false;
j++;
temp = arr[i];
arr[i + 1] = temp;
swapped = true;
it3 = ((i)*(j));
}
Numărul de iterații pentru cazul favorabil
Algoritm
MergeSort QuickSort BubbleSort
n
10 19 1 9
100 199 1 99
1000 1999 1 999
10000 19999 1 9999
Algoritm
MergeSort QuickSort BubbleSort
n
10 19 8 9
100 199 98 99
1000 1999 998 999
10000 19999 9998 9999
Algoritm
MergeSort QuickSort BubbleSort
n
10 19 10 9
100 199 195 99
1000 1999 1993 999
10000 19999 19996 9999
Diagrama pentru cazul favorabil
25000
20000
15000
10000
5000
0
10 100 1000 10000
20000
15000
10000
5000
0
10 100 1000 10000
20000
15000
10000
5000
0
10 100 1000 10000
Scopul propus de această lucrare a fost de a utiliza 3 metode de sortare a vectorilor – QuickSort,
MergeSort și BubbleSort. Executînd programele și de fiecare dată introducînd date de intrare diferite,
am aflat numărul de iterații pentru fiecare din algoritmi.
Cele mai multe resurse resurse ale calculatorului la un tablou de 10.000 de elemente a utilizat
algoritmul MergeSort, deci este unul mai ineficient, dar stabil pentru fiecare din cele 3
cazuri(favorabil, defavorabil sau random).
Cel mai eficient dintre algoritmi s-a dovedit a fi QuickSort, care are cele mai puține iterații, deci
și utilizează resurse mai puține.
Anexa A
Anexa B
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
int i,j,k,it,it2,it3;
int n;
int r,l,m;
int Left = m - l + 1;
int Right = r - m;
i = 0;
j = 0;
k = l;
arr[k] = subArrayLeft[i];
i++;
}
else
arr[k] = subArrayRight[j];
j++;
k++;
arr[k] = subArrayLeft[i];
i++;
k++;
arr[k] = subArrayRight[j];
j++;
k++;
it2++;
if (l < r)
int m = l+(r-l)/2;
mergeSort(arr, l, m);
merge(arr, l, m, r);
}
}
int t = *a;
*a = *b;
*b = t;
int j;
i++;
swap(&arr[i], &arr[j]);
it = i + j;
return (i + 1);
quickSort(arr2, pi + 1, high);
int i;
std::cout<<arr[i]<<" ";
std::cout<<endl;
while (swapped) {
swapped = false;
j++;
temp = arr[i];
arr[i + 1] = temp;
swapped = true;
it3 = ((i)*(j));
int main()
for(i=0;i<n;i++){
std::cin>>arr[i];
}*/
int* arr2=arr;
int* arr3=arr;
printArray(arr, n);
quickSort(arr2, 0, n-1);
printArray(arr2, n);
std::cout<<"Nr. de iteratii="<<it<<"\n\n";
mergeSort(arr, 0, n-1);
printArray(arr, n);
std::cout<<"Nr. de iteratii="<<it2<<"\n\n";
bubble_sort(arr3, n);
printArray(arr3, n);
std::cout<<"Nr. de iteratii="<<it3<<"\n\n";
return 0;