Sunteți pe pagina 1din 2

Metoda bulelor Selecția minimului

... ...
int ok=0; for(i=1; i<n; i++)
do { ///determin minimul si
{ ok=1; ///pozitia lui dintre a[i],a[i+1],...,a[n]
for(i=1; i<n ;i++) pmin=i;
if( a[i]> a[i+1]) for(j=j+1; j<=n; j++)
{swap (a[i],a[i+1]); if( a[j]<a[pmin])
ok=0; pmin=j;
}
} while(ok==0); ///interschimb a[i] cu a[pmin]
... int aux=a[i];
a[i]=a[pmin];
a[pmin]=aux;
}
Sortarea prin numărare Sortarea prin inserție directă
for(int i = 2 ; i <= n ; i ++) for(int i = 1 ; i < n ; i ++)
{ for(int j = 1 ; j < i ; j ++) {
if(a[i]<a[j]) int k = i;
b[j]++; while(k > 0 && a[k] < a[k-1])
else {
b[i]++; int aux = a[k];
} a[k] = a[k-1];
for(int i = 1 ; i < =n ; i ++) a[k-1] = aux;
c[b[i]+1]=a[i]; k --;
}
}

Metoda prin selecție implicită


for(i=1; i<n; i++)
for (j=i+1; j<=n; j++)
if( a[i]> a[j]) /// nu respectă ordinea de sortare
swap (a[i],a[j]);

Sortare STL
STL (Standard Template Library) conține o funcție ce realizează sortarea eficientă a unui tablou, sort. Ea poate fi folosită atât
pentru sortarea unui vector STL, cât și pentru sortarea unui tablou standard. Funcția sort este declarată în header-ul algorithm,
care trebuie inclus în programul sursă:
#include <algorithm>
Pentru a sorta în tabloul A secvența delimitată de indicii s și d (inclusiv aceștia), se face apelul:
sort(A + s, A + d + 1);
Dacă tabloul este indexat de la 1 la n, apelul va fi:
sort(A + 1, A + n + 1);
Pentru a sorta descrescător elementele secvenței delimitate de indicii s și d în tabloul A cu elemente de tip int, se transmite funcției
sort un parametru suplimentar. Al treilea parametru al funcției sort este de fapt o funcție de comparare, care se folosește pentru
a stabili dacă elementele secvenței/tabloului sunt în ordinea dorită. Mai precis, această funcție are doi parametri de același tip cu
elementele tabloului sortat și returnează true dacă primul parametru este situat înaintea celui de-al doilea în ordinea în care se
doresc a fi ordonate elementele tabloului și false în caz contrar. Astfel sortarea descrescătoare poate fi realizată și astfel:
bool fcmp(int x, int y)
{
if(x > y)
return true;
return false;
}
...
int A[1001], n;
...
sort(A + 1, A + n + 1, fcmp);
Aplicații
SET I

#509 Să se scrie un program care ordonează crescător elementele unui vector

#129 Să se scrie un program care ordonează descrescător elementele unui vector.

#511. Se dă un vector cu n elemente, numere naturale și un număr k. Ordonați crescător primele k elemente ale
vectorului și descrescător ultimele n-k elemente.

#512. Se dă un vector cu n elemente, numere naturale distincte. Ordonați crescător elementele situate înaintea valorii
maxime din vector și descrescător elementele situate după această valoare.

#180 Să se ordoneze crescător elementele dintr-un şir dat cuprinse între elementul de valoare maximă şi cel de
valoare minimă.

#86 Să se scrie un program care ordonează crescător elementele din prima jumătate a unui vector și descrescător
elementele din a doua jumătate.

#1191. Se citesc n numere naturale reprezentând înălțimile a n clădiri. Cerința problemei este de a realiza un proiect
de arhitectură în care clădirile sunt ordonate descrescător după înălțimea lor.

#236 Fișierul text sort2.in conține, dispuse pe mai multe linii, cel mult 100 de numere naturale, cu cel mult 4 cifre
fiecare. Să se afișeze în fișierul sort2.out, în ordine crescătoare, toate numerele din fișierul sort2.in care au cel
mult 2 cifre.

#605 CRB are un șir cu n numere naturale diferite. Nu știe ce să facă cu ele și le aranjează în ordine descrescătoare.
Apoi observă că anumite numere se află pe aceeași poziție ca în șirul inițial. Ajutați pe CRB să determine câte
elemente din șir respectă această regulă.

#1900 Se citește un număr natural n cu cel mult 16 cifre. Fie q numărul de cifre ale numărului n. Prin eliminarea unei
singure cifre din scrierea numărului n se obține un șir de q numere. Să se afișeze în ordine crescătoare, numerele
nenule din acest șir care sunt prime cu numărul n.

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