Documente Academic
Documente Profesional
Documente Cultură
Sort Ari
Sort Ari
Sortarea sau ordonarea unui sir/tablou/liste/etc. este o necesitate intalnita in multe cazuri atunci
cand realizamm un algoritm pentru rezolvarea unei anumite probleme. Prin sortare se intelege
realizarea unui algoritm prin intermediul caruia putem rearanja in ordine crescatoare sau descrescatoare
un anumt numar de elemente.
Este una dintre cele mai simple metode de sortare, eficient pentru un numr mic de elemente,
nefiind mare consumatoare de memorie. Metoda consta in parcurgerea unui vector de mai multe ori,
pana cand acesta devine un vector ordonat. La fiecare pas se compara 2 elemente consecutive: v[i] si
v[i+1], iar atunci cand v[i]>v[i+1] se interschimba cele 2 elemente (in cazul ordonarii crescatoare).
Pentru repetarea parcurgerii vectorului se foloseste o variabila booleana care la fiecare reluare a
algoritmului primeste o valoare initiala, urmand ca aceasta sa se schimbe in cazul in care se efectueaza
o interschimbare a valorilor celor 2 elemente consecutive. Cand tabloul va fi parcurs fara a se mai
efectua nici o interschimbare, inseamna ca aceste este deja sortat - in consecinta algoritmul se va
incheia.
Metoda este mai lent dect metoda prin insertie, timpul de executie depinzand de datele de
intrare, adic de ordinea initial al elementelor. Dac tabela este deja sortat e nevoie de un singur pas,
adic N-1 comparri. n cazul cel mai nefavorabil sunt necesare N(N-1)/2 comparri si N(N-1)/2
interschimbri.
o se creaza bucla repetitiva (for) pentru a realiza compararea elementelor succesive ale
vectorului
#include <iostream>
using namespace std;
int main()
{
int v[20],n,i,gasit,temp;
cout<<"Introduceti dimensiunea vectorului: n=";cin>>n;
cout<<"Introduceti elementele vectorului:"<<endl;
for(i=1;i<=n;i++)
{
cout<<"v["<<i<<"]=";
cin>>v[i];
}
do
{
gasit=0;
for(i=1;i<n;i++)
if(v[i]>v[i+1])
{
temp=v[i];
v[i]=v[i+1];
v[i+1]=temp;
gasit=1;
}
}
while(gasit==1);
cout<<"Dupa sortarea bubble sort, vectorul este: ";
for(i=1;i<=n;i++)
cout<<v[i]<<" ";
}
Prin aceasta metoda se cauta elementul minim din fiecare subsir obtinut din sirul initial cu exceptia
primului element a sirului/subsirului initial. Astfel, daca avem un vector V cu n elemente:
- primul subsir este: v[2], v[3], ... , v[n] - se cauta minimul din acest subsir si acesta se interschimba cu
v[1]
- al doilea subsir este: v[3], v[4],...,v[n] - se cauta minimul din acest subsir si acesta se interschimba cu
v[2]
- al treilea subsir este: v[4], v[5],...,v[n] - se cauta minimul din acest subsir si acesta se interschimba cu
v[3]
- s.a.m.d.
Pentru repetarea cautarii minimului in subvectorii consecutivi se folosesc 2 structuri repetitive cu numar
finit de pasi (for).
Pasii care trebuiesc urmati in cazul sortarii prin metoda selectiei directe:
Se creaza bucla repetitiva de parcurgere a vectorului (de la primul pana la penultimul element: for
i=1;i<n;i++)
o se retine pozitia i intr-o alta variabila (k) in vederea interschimbarii valorii vectorului de pe
aceasta pozitie cu o eventuala valoare mai mica gasita pe alta pozitie
#include <iostream>
using namespace std;
int main()
{
int v[20],n,i,j,k,min,temp;
cout<<"Introduceti dimensiunea vectorului: n=";cin>>n;
cout<<"Introduceti elementele vectorului:"<<endl;
for(i=1;i<=n;i++)
{
cout<<"v["<<i<<"]=";
cin>>v[i];
}
for(i=1;i<n;i++)
{
min=v[i];
k=i;
for(j=i+1;j<=n;j++)
if(v[j]<min)
{
min=v[j];
k=j;
}
temp=v[i];
v[i]=v[k];
v[k]=temp;
}
cout<<"Dupa sortarea prin selectie directa, vectorul este: ";
for(i=1;i<=n;i++)
cout<<v[i]<<" ";
}