Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Metode de sortare a sirurilor
Se citesc n numere intregi. Se cere ca acestea sa fie scrise in ordine crescatoare/ descrescatoare . Exemplu: n=4 si se citesc numerele: 3,1,6,2. Numerele vor fi afisate in ordinea 1,2,3,6 (daca se cere sa fie scrise crescator) sau 6,3,2,1 (daca se cere sa fie scrise descrescator).
Operatia prin care se aranjeaza cele n numere in ordine crescatoare/ descrescatoare se numeste sortare.
Pentru a sorta cele n valori, acestea se citesc intr-o variabila de tip vector (sir). Sortarea propriu-zisa se face in cadrul acestei variabile.
Algoritmul este urmatorul:
Exemplu: continutul variabilei care retine numerele citite este:
3 |
1 |
4 |
2 |
a
a[1] a[2] a[3] a[4]
Minimul este 1 si se gaseste pe pozitia 2. se inverseaza continuturile componentelor 1 si 2.
1 |
3 |
4 |
2 |
a
a[1] a[2] a[3] a[4]
Se calculeaza minimul dintre valorile retinute in componentele de la 2 la 4. Acesta este 2 si este retinut de componenta 4. Se inverseaza continutul componentelor 2 si 4.
1 |
2 |
4 |
3 |
a
a[1] a[2] a[3] a[4]
Se determina minimul dintre valorile retinute in componentele de la 3 la 4. Acesta este 3 si este retinut de componenta 4. Se inverseaza continutul componentelor 3 si 4.
1 |
2 |
3 |
4 |
a
a[1] a[2] a[3] a[4]
Acum, valorile se pot afisa. Procedeul a fost repetat de n-1 ori. In cazul in care se cere sortarea descrescatoare, la fiecare pas se calculeaza maximul (exercitiu!)
Algoritmul Sort_Min:
Date de intrare: a - sirul de valori care urmeaza sa fie sortate
n - numarul de valori din sirul a
Date de iesire: a - sirul sortat.
Algoritmul Sort_Min este urmatorul:
Citeste n;
Pentru i=1,n executa
Citeste a[i];
Sf_pentru;
Pentru i=1,n-1 executa
Min ← a[i]; k←i;
Pentru j=i+1,n executa
Daca a[j]<min atunci
min←a[j]; k←j;
sf_daca;
aux←a[k]; a[k] ←a[i]; a[i] ←aux;
sf_pentru;
sf_pentru;
pentru i=1,n executa scrie a[i];
sf_pentru
sf_Sort_Min.
Algoritmul este urmatorul:
Algoritmul Sort_Intersch:
Date de intrare: a - sirul care urmeaza sa fie sortat
n - numarul de elemente din sirul a
Date de iesire: a - sirul sortat crescator
Algoritmul Sort_Intersch este urmatorul:
Citeste n;
Pentru i=1,n executa citeste a[i];
Sf_pentru;
Repeta
Ok=fals;
Pentru i=1,n-1 executa
Daca a[i]>a[i+1] atunci
Ok ← adevarat;
aux←a[i]; a[i]←a[i+1]; a[i+1]←aux;
sf_daca;
sf_pentru;
Pana cand ok=fals;
Pentru i=1,n executa scrie a[i];
Sf_pentru;
Sf_Sort_Intersch.
Tema: Luati un exemplu concret, pe care sa testati algoritmul.
Cu ajutorul variabilei citite a se aranjeaza valorile intr-o alta variabila, b, in ordine crescatoare. Pentru aceasta, se procedeaza astfel:
Pentru realizarea inserarii unei valori, se parcurge sirul b de la dreapta la stanga pana cand se gaseste o componenta care retine o valoare mai mare decat cea care se insereaza, sau pana cand a fost parcurs intreg sirul. Incepand cu valoarea retinuta de componenta care va fi ocupata de valoarea inserata, toate valorile retinute se deplaseaza spre dreapta cu o pozitie.
Algoritmul Sort_Insertie:
Date de intrare: a - sirul care urmeaza sa fie sortat
n - numarul de elemente din sirul a
Date de iesire: b - sirul sortat crescator
Algoritmul Sort_Insertie este urmatorul:
Citeste n;
Pentru i=1,n executa citeste a[i];
Sf_pentru;
b[1] ← a[1];
pentru i=1,n executa
j←i-1;
cat timp (j>0)si(a[i]<b[j]) executa j←j-1;
sf_cattimp;
pentru k=i-1,j+1 executa b[k+1]←b[k];
sf_pentru;
b[j+1] ←a[i];
sf_pentru;
pentru i=1,n executa scrie b[i];
sf_pentru;
sf_Sort_Insertie
Tema: Luati un exemplu concret, pe care sa testati algoritmul.
Se citesc m numere intregi ordonate crescator (descrescator). De asemenea, se citesc alte n numere intregi ordonate crescator (descrescator). Se cere sa se afiseze toate numerele citite, in ordine crescatoare (descrescatoare).
Pentru rezolvarea problemei exista un algoritm classic, cel de interclasare, foarte performant. Presupunem ca sirurile de numere sortate se memoreaza in variabilele a si b. Numerele sortate vor fi memorate intr-un alt sir, numit c. La fiecare pas se alege un numar care va fi memorat in sirul c.
Algoritmul Sort_Intercl:
Date de intrare: a, b - sirurile cu elemente ordonate crescator
m - numarul de elemente din sirul a
n - numarul de elemente din sirul b
Date de iesire: c - noul sirul sortat crescator
k - numarul de elemente din sirul c.
Algoritmul Sort_Intercl este urmatorul:
Citeste m;
Pentru i=1,m executa citeste a[i];
Sf_pentru;
Citeste n;
Pentru i=1,n executa citeste b[i];
Sf_pentru;
i←1; j←1;k←1;
cat timp (i<=m)si(j<=n) executa
daca a[i]<b[j] atunci
c[k]:=a[i];
i←i+1;
altfel
c[k] ← b[j];
j←j+1;
sf_daca;
k←k+1;
sf_cattimp;
daca i<=m atunci
pentru j=i,m executa
c[k] ←a[j];
k←k+1;
sf_pentru
altfel
pentru i=j,n executa
c[k] ←b[i];
k←k+1;
sf_pentru;
sf_daca;
pentru i=1,k-1 executa scrie c[i];
sf_pentru;
sf_Sort_Intercl.
Copyright © 2024 - Toate drepturile rezervate