Sunteți pe pagina 1din 3

Algoritmi de sortare a unui vector

Prin sortarea unui vector se înţelege aranjarea elementelor în ordine crescătoare sau
descrescătoare.

(Sortarea crescătoare a unui vector) Se citeşte un număr natural nenul n(1<=n<=50) de la


tastatură. Scrieţi un program Pascal care citeşte un şir de n elemente numere întregi, de
maxim 4 cifre fiecare, apoi sortează elementele şirului citit iniţial în ordine crescătoare. La
final se va afişa vectorul sortat crescător.

Rezolvare problemei

1) sortare a unui vector prin metoda interschimbării directe


Funcţionalitate: Fiecare element al vectorului va juca pe rând rolul unui pivot. Se parcurg
pivoţii folosind structura repetitivă for şi la fiecare pas al structurii comparăm pivotul de pe
poziţia i cu toate elementele aflate după el. Compararea se va face într-o altă structură for şi
pentru fiecare element găsit care e mai mic decât pivotul se realizează interschimbarea. După
ce toate elementele au fost pivoţi, vectorul este în întregime sortat.

program metoda_interschimării_directe;
type vector=array[1..50] of integer;
var v:vector; aux:integer; i,n,j:byte;
begin
write('n= ');readln(n);
writeln('Intr. elem. in vector: ');
for i:=1 to n do begin
write('v[',i,']='); readln(v[i]);
end;
writeln('Vectorul initial este: ');
for i:=1 to n do write(v[i],' ');
writeln;
{algoritmul de interschimare, sortare crescatoare}
for i:=1 to n-1 do
for j:=i+1 to n do
if v[j]<v[i] then begin
aux:=v[i];
v[i]:=v[j];
v[j]:=aux;
end;
writeln('Vectorul sortat crescator este: ');
for i:=1 to n do write(v[i],' ');
end.

2) sortare a unui vector prin metoda bulelor


Funcţionalitate: Ideea care stă la baza metodei constă în formarea de perechi de elemente
succesive. Elementele fiecărei perechi vor fi ordonate crescător, iar prin mai multe parcurgeri
ale vectorului se va obţine un şir sortat. După prima parcurgere a vectorului pe ultima poziţie
va ajunge elementul care este cel mai mare din tot vectorul. După a două parcurgere pe
penultima poziţie va ajunge al doilea cel mai mare element al vectorului, ş.a.m.d. La final
vectorul va fi sortat.
program metoda_bulelor;
type vector=array[1..50] of integer;
var v:vector; aux:integer; ord:boolean;
i,n:byte;
begin
write('n= ');readln(n);
writeln('Intr. elem. in vector: ');
for i:=1 to n do begin
write('v[',i,']=');
readln(v[i]);
end;
writeln('Vectorul initial este: ');
for i:=1 to n do write(v[i],' ');
writeln;
{sortarea vectorului folosind metoda bulelor}
repeat
ord:=true;
for i:=1 to n-1 do
if v[i]>v[i+1] then begin
aux:=v[i];
v[i]:=v[i+1];
v[i+1]:=aux;
ord:=false;
end;
until ord;
writeln('Vectorul sortat este: ');
for i:=1 to n do write(v[i],' ');
end.

Căutare binară
Fie un vector v cu n componente numere întregi SORTATE CRESCĂTOR, se pune
problema de a stabili dacă o valoare dată x se găseşte sau nu printre elementele vectorului.
Ideea de la care se porneşte este următoarea: căutarea se efectuează într-un interval
[li,ls], unde li este limita inferioară a intervalului, mai exact indicele primului element din
vector iar ls este limita superioară , mai exact indicele ultimului element din vector. La modul
general intervalul iniţial de căutare este [1,n].
În continuare procedăm astfel :
calculăm indicele componentei din mijloc :
k: = (li+ls ) div 2;
pot exista 3 situaţii :
o dacă v[k]=x atunci se afişează un mesaj corespunzător şi căutarea se încheie
cu succes
o dacă v[k]<x atunci se reiniţializează intervalul de căutare: li:= k+1 şi ls
o dc v[k]>x atunci intervalul de căutare va fi: li şi ls:=k-1
căutarea se încheie când x a fost găsit sau când li>ls . Când li>ls atunci înseamnă că x nu
se găseşte în vector.

Secvenţa de program :
li:= 1; ls:=n; gasit:=false;
repeat
k:=(li+ls) div 2;
if v[k]=x then
begin
writeln(x,’ gasit pe pozitia ’,k);
gasit:=true;
end
else
if v[k]<x then li:=k+1
else ls:=k-1;
until (li>ls) or gasit;
if li> ls then writeln(’Numarul cautat nu se gaseste in vector’);
end.

Exemplu :
n=7
x = 13

-1 3 5 6 9 13 18

li=1 ls=7
k=4 => v[k]=6 , 6 < 13 => li=5 si ls =7
k = 6 => v[k]=13 13 = 13 => Valoare gasita.

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