Sunteți pe pagina 1din 7

Metode de sortare a vectorilor

Cuprins

1. Ordonarea prin metoda selecţiei a unui vector .................................................................. 2


2. Ordonarea prin metoda bulelor a unui vector .................................................................... 4
3. Ordonarea prin metoda insertiei a unui vector ................................................................... 5
4. Ordonarea prin numărare a unui vector ............................................................................. 6
5. Ordonarea prin interclasare a doi vectori ordonaţi ............................................................ 7

©EDP Pag. 1
1. Ordonarea prin metoda selecţiei a unui vector

În cazul sortării prin selecţie, elementele vectorului sunt împărţite în două “liste”, una
ordonată şi una neordonată, separate de un „perete” imaginar. Algoritmul de selecţie se
bazează pe n+1 paşi succesivi de tipul
Se identifică cel mai mic element al listei neordonate
Se inter schimbă minimul cu primul element al listei neordonate (el devine astfel
ultimul element al listei ordonate)

program select_sort1;
uses crt;
var x:array[1..20] of integer;
i,j,n,aux,min:integer;
begin
clrscr;
write('Dati nr de elemente: ');readln(n);
{citirea vectorului}
for i:=1 to n do
begin
write('Dati x[',i,']=');readln(x[i])
end;

{sortarea vectorului}
for i:=1 to n-1 do
begin
min:=i;
for j:=i+1 to n do
if x[j]<x[min] then min:=j;
aux:=x[i];
x[i]:=x[min];
x[min]:=aux;
end;

write('Vectorul sortat este');


for i:=1 to n do
write(x[i],', ');
readln;
end.

©EDP Pag. 2
O varianta a metodei selectiei este selectia directa, unde in procesul de cautare a minimului
au loc mai multe interschimbari pentru elementele care nu satisfac relatia de ordine.
Complexitatea algoritmului este aceeasi.
program select_sort2;
uses crt;
var x:array[1..20] of integer;
i,j,n,aux:integer;
begin
clrscr;
write('Dati nr de elemente: ');readln(n);
{citirea vectorului}
for i:=1 to n do
begin
write('Dati x[',i,']=');readln(x[i])
end;
{sortarea vectorului}
for i:=1 to n-1 do
for j:=i+1 to n do
if x[j]<x[i] then
begin
aux:=x[i];
x[i]:=x[j];
x[j]:=aux;
end;
write('Vectorul sortat este');
for i:=1 to n do
write(x[i],', ');
readln;
end.

©EDP Pag. 3
2. Ordonarea prin metoda bulelor a unui vector

http://www.youtube.com/watch?v=P00xJgWzz2c&feature=fvw

În cazul sortării prin metoda bulelor, două elemente vecine ale vectorului se compară între
ele. Dacă sunt în ordinea nepotrivită se inter schimbă. Vectorul se parcurge de mai multe ori
până când la ultima trecere nu mai are loc nicio interschimbare.

program buble_sort;
uses crt;
var n,i,m:integer;
v: array[1..100] of integer;
inv:boolean;
begin
clrscr;
writeln('METODA BULELOR ! ');
writeln('Cate nr. vreti sa sortati?');
write('n= ');readln(n);
for i:=1 to n do begin
write('v[',i,']= ');
readln(v[i]);
end;
repeat
inv:=false;
for i:=1 to n-1 do
if v[i]>v[i+1] then begin
m:=v[i];
v[i]:=v[i+1];
v[i+1]:=m;
inv:=true
end;
until not inv;
writeln('Vectorul sortat: ');
for i:=1 to n do write(v[i],' ');
readln
end.

©EDP Pag. 4
3. Ordonarea prin metoda insertiei a unui vector

http://www.youtube.com/watch?v=c4BRHC7kTaQ&feature=PlayList&p=89B61F78B552C1
AB&playnext_from=PL

În cazul sortării prin inserţie, elementele vectorului sunt împărţite în două “liste”, una
ordonată şi una neordonată. La fiecare pas, primul element al listei nesortate este transferat în
lista sortată, prin inserare la poziţia potrivită care respectă ordinea de sortare cerută.

program insert_sort;
uses crt;
var i,j,k,aux,n:integer;
v:array[1..100]of integer;
begin
clrscr;
write('Introduceti nr numerelor: n= ');readln(n);
for i:=1 to n do
begin
write('v[',i,']=');readln(v[i]);
end;
{metoda insertiei}
for i:=2 to n do
begin
j:=1;
while (j<i)and(v[i]>v[j])do j:=j+1;
aux:=v[i];
for k:=i downto j+1 do v[k]:=v[k-1];
v[j]:=aux;
end;

writeln('Sirul ordonat:');
for i:=1 to n do writeln(v[i]);
readln;
end.

©EDP Pag. 5
4. Ordonarea prin numărare a unui vector

Algoritmul de sortare prin numărare constă în găsirea pentru fiecare dintre elementele
vectorului a[i] a numărului de elemente [k] mai mici ca el. Vectorul ordonat se va scrie într-
un alt vector, din numărare rezultând exact poziţia pe care fiecare element trebuie să o aibă în
vectorul sortat b[k].

program num_sort1;
uses crt;
var a,b:array[1..10] of integer;
i,j,n,k:integer;
begin
write('n=');readln(n);
for i:=1 to n do
begin
write('a[',i,']=');
readln(a[i]);
end;
for i:=1 to n do begin
k:=1;
for j:=1 to n do
if a[j]<a[i] then k:=k+1;
b[k]:=a[i];end;
for i:=1 to n do write(b[i],' ');
readln;
end.

Nota: Se pp. ca elementele vectorului a sunt distincte. O alta varianta de


implementare ar fi cea in care valorile lui k se retin intr-un vector k[i],
dupa care vectorul a se scrie in b.

program num_sort2;
uses crt;
var a,b,k:array[1..10] of integer;
i,j,n:integer;
begin
write('n=');readln(n);
for i:=1 to n do
begin
write('a[',i,']=');
readln(a[i]);
end;
for i:=1 to n do k[i]:=0; {initializez vectorul k}
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]<a[j] then k[j]:=k[j]+1
else k[i]:=k[i]+1;
for i:=1 to n do b[k[i]+1]:=a[i];
for i:=1 to n do write(b[i],' ');

readln;
end.

©EDP Pag. 6
5. Ordonarea prin interclasare a doi vectori ordonaţi

http://www.youtube.com/watch?v=GCae1WNvnZM&feature=PlayList&p=89B61F78B552C
1AB&playnext_from=PL

Se dau 2 vectori cu n componente, respectiv m componente, ordonaţi. Sa se construiască


vectorul ordonat cu m+n componente format din elementele celor doi vectori.

program interclasare;
type vect=array[1..20] of integer;
var a,b,c:vect;
n,m,k,i,j,t:integer;
begin
writeln('vectorii sunt introdusi crescator');
writeln('Sir 1, n=');readln(n);
for i:=1 to n do begin
write('a[',i,']=');readln(a[i]);end;
writeln('Sir 2, m=');readln(m);
for j:=1 to m do begin
write('b[',j,']=');readln(b[j]);end;
i:=1;j:=1;k:=0;
while (i<=n)and(j<=m) do
if a[i]<b[j] then
begin
k:=k+1;
c[k]:=a[i];
i:=i+1;
end
else
begin
k:=k+1;
c[k]:=b[j];
j:=j+1;
end;
if i>n then
for t:=j to m do begin
k:=k+1;c[k]:=b[t];
end
else
for t:=i to n do begin
k:=k+1;c[k]:=a[t];
end;
for i:=1 to k do write(c[i],' ');
readln;
end.

©EDP Pag. 7

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