Documente Academic
Documente Profesional
Documente Cultură
Scrieţi pseudocodul pentru diverse metode de sortare ca, Heap (heap sort), Bulelor (buble sort),
Rapidă (quick sort), Radix (radacina), etc.
HEAP SORT
subalgoritm combinare(vf, n)
baza, valoare, gata întreg;
baza←2*vf; valoare←x[vf];gata←0;
cât timp baza≤n şi gata=0 execută
dacă baza < n si x[baza] > x[baza+1] atunci baza←baza+1
sfârşit dacă;
dacă valoare>x[baza] atunci
x[vf]←x[baza]
vf←baza
baza←baza*2
altfel
gata←1
sfârşit dacă;
sfârşit cât timp;
x[vf]←valoare;
sfârşit combinare;
subalgoritm heap()
i intreg;
pentru i←n/2,1,-1 execută
combinare(i,n);
sfârşit pentru;
sfârşit heap;
subalgoritm heapsort()
aux,i întreg;
heap()
pentru i←n,2,-1 execută
aux←v[1];
v[1] ←v[i];
v[i] ←aux;
combinare(1,i-1);
sfârşit pentru;
sfârşit heapsort;
BUBLE SORT
Subalgoritm Metoda_bulelor(v,n)
repetă
ok <— adevărat
pentru i=l,n-l execută
dacă v[i]>v[i+l]atunci
ok fals
aux v[i]
v[i] v[i+1]
v[i+l] aux
sfârşit dacă
sfârşit pentru
până când ok
sfârşit subalgoritm
7. Considerând două numere întregi determinaţi cmmdc folosind algorimul lui Euclid.
#include <iostream>
int main()
{
int n , m;
std :: cin >> n >> m;
while(m != 0)
{
int r = n % m;
n = m;
m = r;
}
std :: cout << n << std :: endl;
return 0;
}
8. Descrieţi algoritmii pentru descompunerea unui număr în factori primi, determinarea tuturor
numerelor prime până la un n citit etc.
Descompunerea în factori primi a numărului natural n
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
int d = 2, // d va fi, pe rand, fiecare factor prim din descompunere
p; // p va fi puterea lui d in descompunere
// il im partim pe n la d in mod repetat, pana cand devine 1
while(n > 1)
{
// numaram de cate ori se imparte n la d. Aceasta va fi puterea lui d in descompunere
p = 0;
while(n % d == 0)
{
++p;
n /= d;
}
// daca s-a facut cel putin o impartire, afisam factorul si puterea
if(p)
cout << d << " " << p << endl;
++ d;
// daca d * d il depaseste pe n si n nu este 1, decidem ca n este prim,
// si este factor in descompunerea valorii initiale a lui n
if(n>1 && d * d > n){
d = n; // trecem direct la n, urmatorul factor din descompunere
}
}
return 0;
}
Determinarea tuturor numerelor prime până la un n citit
nt C[100], NC, I, J;
//2 este primul numar prim
C[1]=2; NC=1; cin >>N;
for(I=3; NC<N; I=I+2) //merg doar pe numere impare
{//caut divizori pentru I
for(J=1;J<=NC && I % C[J]!=0 ;J++);
if(J>NC) //nu s-a gasit divizor=> I este prim si il adaug la sfarsitul vectorului
{NC++; C[NC]=I;}
}
//ies cand NC==N
//afisez primele N numere prime
for(I=1;I<=N;I++) cout<<C[I]<<” “;