Sunteți pe pagina 1din 4

Tablouri unidimensionale in C++. Algoritmi de sortare.

Clasa a V-a
Sortarea vectorilor
Prin sortare se întelege aranjarea elementelor unui vector în ordine crescatoare sau descrescatoare.
Operaţia de sortare a unor elemente în funcţie de diverse criterii este foarte des întâlnită în practică. Se
cunosc o mulţime de algoritmi de sortare, fiind mai mult sau mai putin rapizi, foarte simpli sau... extrem
de complicați.

Sortarea prin selecție directă

Algoritmul constă în alegerea celui mai mic element dintr-un vector şi aşezarea lui pe prima poziţie,
repetată pentru şiruri din ce în ce mai scurte.
În cazul unui vector sortat crescător, primul element (cu indice 0) este cel mai mic dintre cele cu indici
de la 0 la n-1, cel de-al doilea este cel mai mic dintre cele cu indici de la 1 la n-1 ş.a.m.d. Să considerăm
un vector în care elementele cu indici de la 0 la i-1 sunt deja sortate. Pentru a continua procesul de sortare,
dintre elementele rămase (cu indici de la i până la n-1) trebuie găsit cel mai mic (cu indice i ) şi adus în
poziţia i.

Implementarea algoritmului descris: // vectorul v are n elemente a fost citit


// parcurgem vectorul de la stanga la dreapta
for ( i = 0; i < n-1 ; i++ )
for ( j = i + 1; j <n; j++ )
if ( v[i] > v[j] ) // interschimbam elementele de pe pozitiile i si j
{ aux = v[i];
v[i] = v[j];
v[j] = aux;}

Timpul de executie al unui astfel de algoritm spunem ca este patratic T(n) = O(n*n)

Probleme propuse

1. SortMinMax( pbinfo)
Să se ordoneze crescător elementele dintr-un şir dat cuprinse între elementul de valoare maximă şi cel
de valoare minimă.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale distincte, separate prin spaţii.
Date de ieşire
Programul afișează pe ecran elementele şirului după ordonare.
Restricţii şi precizări
- 0 < n ≤ 1000
- elementele şirului sunt numere naturale mai mici decât 1.000.000
Intrare Ieșire
5 10 7 15 20 12
10 20 15 7 12 min=7; max=20
i j= pmin=3; pmax=1;
Tablouri unidimensionale in C++. Algoritmi de sortare.
Clasa a V-a
#include <iostream>
using namespace std;
int main()
{ int a[1000],min,max,pmin,pmax,n,i,j,aux;
cout<<"n= "; cin>>n;
min=1000000; max=0;
for (i=0;i<n;i++)
{ cin>>a[i];
if (a[i]<min)
{ min=a[i]; pmin=i; }
if (a[i]>max)
{ max=a[i]; pmax=i; } }
if (pmin>pmax)
{ aux=pmin; pmin=pmax; pmax=aux; } }
if (pmin>pmax)
{ aux=pmin; pmin=pmax; pmax=aux; }
for (i=pmin;i<=pmax-1;i++)
for (j=i+1;j<=pmax;j++)
{ if (a[j]<a[i])
{ aux=a[i]; a[i]=a[j]; a[j]=aux; }
}
cout<<"Vectorul sortat este: ";
for (i=0;i<n;i++)
cout<<a[i]<<" ";
return 0; }

2. Sortcif (pbinfo.ro)
Se dă un vector cu n elemente numere întregi. Să se ordoneze crescător elementele unui vector
crescător după suma cifrelor.
Date de intrare
Fişierul de intrare sortcif.in conţine pe prima linie numărul n si pe a doua linie n numere întregi separate
prin spaţii.
Date de ieşire
Fişierul de ieşire sortcif.out va conţine pe prima linie cele n elemente ale vectorului, ordonate conform
cerinței, separate printr-un spațiu.
Restricţii şi precizări
- 0 < n ≤ 100
- valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât
99999999
Exemplu
sortcif.in
6
89 22 91 4005 51 721
sortcif.out
22 51 4005 91 721 89
#include <iostream>
using namespace std;
Tablouri unidimensionale in C++. Algoritmi de sortare.
Clasa a V-a
int main()
{ long int v[100],nr,c,aux,si,sj,n,i,j;
cout<<"n= ";
cin>>n;
for(i=0;i<n;i++)
cin>>v[i];
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{ si=0; aux=v[i];
while(aux!=0)
{ c=aux%10; aux=aux/10; si=si+c; }
aux=v[j]; sj=0;
while(aux!=0)
{ c=aux%10; aux=aux/10; sj=sj+c; }
if(si>sj)
{ aux=v[i]; v[i]=v[j]; v[j]=aux; } }
cout<<"Vectorul ordonat este : ";
for(i=0;i<n;i++)
cout<<v[i]<<" ";
return 0; }

Rezolvare SortPrime
#include <iostream>

using namespace std; // 4 5 12 7 9 2


// v= 5 7 2
// nrv=0 nrv=1 nrv nrv

int main()
{ long int v[1000],i,nrv,n,d,nrd,j,aux,x;
//nrv-cate elemente are vectorul v
cout<<"n=";cin>>n;
nrv=0;
for(i=0;i<n;i++)
{
cin>>x;
nrd=0;
for(d=1;d<=x;d++)
if(x%d==0)
nrd++;
if(nrd==2)
{
v[nrv]=x;
nrv++;
}
}
for(i=0;i<nrv-1;i++)
for(j=i+1;j<nrv;j++)
Tablouri unidimensionale in C++. Algoritmi de sortare.
Clasa a V-a

if(v[i]>v[j])
{ aux=v[i];
v[i]=v[j];
v[j]=aux;}
cout<<"numerele sortate: ";
for(i=0;i<nrv;i++)
cout<<v[i]<<" ";
return 0;
}
Probleme propuse

http://www.pbinfo.ro;SortSd, Inaltimi, KSort1 ,Cifre Ord, SortPie, SortMax, Sortare


Divizori ,Produse, Divigrup, Memory007

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