Documente Academic
Documente Profesional
Documente Cultură
Algoritm:
Elementele de la a[1] până la a[j] încă nu sunt ordonate, în timp ce elementele a[j+1], ...,
a[n] formează un șir de valori ordonate crescător.
Mai mult, toate valorile elementelor a[1], a[2],..., a[j] nu depășesc valoarea elementului
a[j+1].
Atunci, se parcurg toate valorile elementelor de la a[1] până la a[j] inclusiv, căutându-se printre ele
elementul cu valoarea maximală. După se este determinat, acesta se schimbă cu locul cu elementul din
poziția j : a[j].
Acum numărul elementelor neordonate s-a micșorat cu 1, în timp ce un element a fost ”așezat” în
poziția corectă. Respectiv, se poate spune că j – indicele ultimului element încă neordonat, s-a micșorat
cu 1!
Procedura descrisă se repetă până când numărul j al elementelor încă neordonate nu va deveni egal cu
1.
Evident, la începutul algoritmului se consideră că j are valoarea n – toate elementele din tablou
formează fragmentul neordonat, în timp ce fragmentul ordonat nu conține nici un element.
Pas 1. j⟵n
Pas 2. Dacă j>1 trecem la Pas 3, altfel trecem la Pas 6
Am spus anterior că sortarea prin metoda bulelor presupune un număr mare de interschimbări a
valorilor elementelor, ceea ce înseamnă mai multe operații, și, respectiv, mai mult timp.
Sortarea prin selecție, pentru fiecare element ”poziționat corect” efectuiază o singură
interschimbare a elementelor. Astfel, numărul de operații se micșorează, iar odată cu el – și timpul de
sortare. În următoarele lecții vom discuta despre algoritmi de sortare cu mult mai rapizi și decât
algoritmul de sortare prin selecție, dar aceștia au o cu totul altă organizare!
În continuare poți analiza un program simplu, care compară timpul de sortare pentru metoda bulelor
și sortarea prin selecție pe seturi identice de date. Valorile sortate sunt generate aleator, numărul lor
fiind egal cu 50000!
Inițiere în Algoritmi Lecția 6 Alt algoritm de ordonare. Sortarea prin selecție
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
return;
}
}
return;
}
int main()
{
// introducere date
srand(time(0)); // initializarea regimului de generare a numerelor aleatoare
n = 50000;
for (int i = 0; i < n; i++) b[i] = a[i] = rand() % 100;
gettimeofday(&start, NULL); //se preia timpul in momentul inceperii sortarii
selection_sort(a,n);
gettimeofday(&stop, NULL); //se preia timpul in momentul sfirsitului sortarii
printf("\n timp pentru sortarea prin selectie - %f\n", secs(start, stop));
// la fel - pentru sortarea prin metoda bulelor
gettimeofday(&start, NULL);
bubblesort(b,n);
gettimeofday(&stop, NULL);
printf("\n timp pentru sortarea prin metoda bulelor - %f\n", secs(start, stop));
return 0;
}
Analizează programul. Modifică numărul de elemente sortate, diapazonul de valori ale elementelor.
După fiecare modificare lansează programul din nou și compară timpii de sortare.
Inițiere în Algoritmi Lecția 6 Alt algoritm de ordonare. Sortarea prin selecție
#include <stdio.h>
int a[100], n, t, k;
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n ; i++)
scanf("%d", &a[i]);
afisaretablou(a, n);
selsort(a, n);
afisaretablou(a, n);
return 0;
}