380 likes | 693 Vues
SORTAREA PRIN METODA BULELOR. OBIECTIVE: să cunoască semnificaţia noţiunii de sortare; să descrie algoritmul în limbaj natural; să cunoască ce variabile sunt necesare; să implementeze algoritmul în limbaj C++; să rezolve probleme ce necesită sortări. SEMNIFICAŢIA NOŢIUNII DE SORTARE.
E N D
SORTAREA PRIN METODA BULELOR OBIECTIVE: să cunoască semnificaţia noţiunii de sortare; să descrie algoritmul în limbaj natural; să cunoască ce variabile sunt necesare; să implementeze algoritmul în limbaj C++; să rezolve probleme ce necesită sortări.
SEMNIFICAŢIA NOŢIUNII DE SORTARE • A sorta un tablou înseamnă a rearanja elementele tabloului astfel încât între acestea să existe o relaţie de ordine (crescătoare sau descrescătoare)
DESCRIEREA METODEI Prin această metodă se parcurge tabloul şi se compară fiecare element cu succesorul său. Dacă nu sunt în ordine, cele două elemente se interschimbă între ele. Tabloul se parcurge de mai multe ori, până când, la o parcurgere completă, nu se mai execută nicio interschimbare între elemente (adică tabloul este sortat).
ENUNŢUL PROBLEMEI: Se dă un tablou a cu nelemente întregi. Să se realizeze sortarea crescătoare a elementelor tabloului.
VARIABILE NECESARE • a – tabloul unidimensional; • n – lungimea tabloului; • aux – pentru interschimbul elementelor (de acelaşi tip cu elementele tabloului); • i – contor (utilizat pentru parcurgerea tabloului); • f – variabilă logică (se utilizează pentru a şti dacă s-a făcut cel puţin o operaţie de interschimbare la parcurgerea tabloului).
ALGORITMUL ÎN LIMBAJ NATURAL • Se iniţializează variabila f cu 1 (adică se presupune că şirul este sortat); • Se începe parcurgerea tabloului plecând de la i=0 (primul element al tabloului); • Se compară elementul a[i] cu elementul următor a[i+1]: • Dacă a[i] > a[i+1] atunci se realizează interschimbul celor două elemente şi variabila f primeşte valoarea 0; • Se trece la următoarea poziţie în tablou prin incrementarea lui i; • Se continua parcurgerea tabloului făcând comparaţiile necesare până când i ajunge la valoarea n-2; • Se reia algoritmul începând cu pasul 1 cât timp f=0, • Când f rămâne 1 atunci înseamnă că tabloul este sortat crescător (la ultima parcurgere nu s-a realizat nici un interchimb de elemente).
Fie tabloul unidimensional a ce are următorul conţinut: Poziţia i = 0 1 2 3 4 3 2 1 n=4
f=1 i=0 Prima parcurgere a tabloului 4 3 2 1 > DA SE REALIZEAZĂ INTERSCHIMBUL ELEMENTELOR
f=0 Prima parcurgere a tabloului 3 4 2 1
f=0 i=1 Prima parcurgere a tabloului 3 4 2 1 > DA SE REALIZEAZĂ INTERSCHIMBUL ELEMENTELOR
f=0 Prima parcurgere a tabloului 3 2 4 1
f=0 i=2 Prima parcurgere a tabloului 3 2 4 1 > DA SE REALIZEAZĂ INTERSCHIMBUL ELEMENTELOR
f=0 Prima parcurgere a tabloului 3 2 1 4
f=0 Prima parcurgere a tabloului 3 2 1 4 f=0 ? DA SE REIA PARCURGEREA TABLOULUI
f=1 i=0 A doua parcurgere a tabloului 3 2 1 4 > DA SE REALIZEAZĂ INTERSCHIMBUL ELEMENTELOR
f=0 A doua parcurgere a tabloului 2 3 1 4
f=0 i=1 A doua parcurgere a tabloului 2 3 1 4 > DA SE REALIZEAZĂ INTERSCHIMBUL ELEMENTELOR
f=0 A doua parcurgere a tabloului 2 1 3 4
f=0 i=2 A doua parcurgere a tabloului 2 1 3 4 > NU
f=0 A doua parcurgere a tabloului 2 1 3 4 f=0 ? DA SE REIA PARCURGEREA TABLOULUI
f=1 i=0 A treia parcurgere a tabloului 2 1 3 4 > DA SE REALIZEAZĂ INTERSCHIMBUL ELEMENTELOR
f=0 A treia parcurgere a tabloului 1 2 3 4
f=0 i=1 A treia parcurgere a tabloului 1 2 3 4 > NU
f=0 i=2 A treia parcurgere a tabloului 1 2 3 4 > NU
f=0 A treia parcurgere a tabloului 1 2 3 4 f=0 ? DA SE REIA PARCURGEREA TABLOULUI
f=1 i=0 A patra parcurgere a tabloului 1 2 3 4 > NU
f=1 i=1 A patra parcurgere a tabloului 1 2 3 4 > NU
f=1 i=2 A patra parcurgere a tabloului 1 2 3 4 > NU
f=1 A patra parcurgere a tabloului 1 2 3 4 f=0 ? NU TABLOUL ESTE SORTAT
Tabloul iniţial: 4 3 2 1 Tabloul sortat crescător 1 2 3 4
ALGORITMUL ÎN LIMBAJ C++ do { f=1; for(i=0;i<n-1;i++) if (a[i]>a[i+1]) { aux=a[i]; a[i]=a[i+1]; a[i+1]=aux; f=0; } } while(!f); cout<<"sirul sortat este"<<endl; for (i=0;i<n;i++) cout<<a[i]<<" "; } #include<iostream.h> int a[20],aux,f; unsigned int n,i; void main (void) { cout<<"n="; cin>>n; for (i=0;i<n;i++) { cout<<"a["<<i+1<<"]="; cin>>a[i]; }
APLICAŢII • Dându-se un tablou cu n elemente numere naturale, şi o variabilă p naturală (p<n), să se sorteze crescător tabloul până la elementul p şi de la elementul p descrescător.
APLICAŢII • Dându-se un tablou cu n elemente numere naturale, să se localizeze elementul maxim şi toate elementele dinaintea lui să se sorteze crescător, iar cele de după el,descrescător.
APLICAŢII • Se introduce anul naşterii pentru un număr de n persoane, n introdus şi el de la tastatură. Să se afişeze vârstele persoanelor în ordine crescătoare.
TEMĂ Pentru un experiment privind inteligenţa unor maimuţe se aşează pe masă un număr de maxim 20 de cuburi. Maimuţele sunt învăţate să aleagă cuburile astfel încât să formeze din toate un turn stabil. Pentru fiecare maimuţă, înainte de testare, este nevoie să se rearanjeze cuburile în ordinea iniţială. Să se alcătuiască algoritmul după care o maimuţă ar trebui să formeze turnul, astfel încât să se poată reface aşezarea iniţială a cuburilor.