Showing posts with label bubble sort. Show all posts
Showing posts with label bubble sort. Show all posts

Saturday, January 23, 2016

Limbajul PHP. Functii cu numar variabil de argumente

Inca un enunt din categoria "practica individuala" asociata unui curs de PHP procedural:

"1.Sa se scrie o functie cu numar variabil de argumente care afiseaza valorile argumentelor primite sub forma unei liste HTML.
Ex: f(1,2,3) va afisa un bulleted (unordered) list cu valorile 1, 2 si 3);2. Aceeasi cerinta ca mai sus, dar functia va afisa argumentele ordonate crescator.3. Aceeasi cerinta, dar functia va avea un prim argument obligatoriu, care specifica sensul ordonarii (crescator sau descrescator)."

Intrucat ultima cerinta la inglobeaza pe anterioarele, solutia propusa o va trata pe aceasta din urma.

S-a definit functia funcTest($asc), care poate fi apelata cu un numar n>= 1 oricat de mare de argumente, apelarea fara argumente generand warning.

In corpul lui funcTest(…) este apelata functia predefinita func_num_ags(). Aceasta intoarce numarul de argumente pasate functiei funcTest(…). Daca numarul este mai mare decat 1, este apelata o alta functie predefinita, func_get_args(),  care intoarce ca rezultat un array cu argumentele pasate.

In continuare, este afisata lista cu argumente nesortate apoi se trece la sortarea acestora cu bubble sort, sensul sortarii fiind stabilit pe baza parametrului $asc(0 = crescator, 1 = descrescator). Pentru o duplicare mai redusa a codului, au fost definite functiile ascSort(…) si descSort(…), apelate din funcTest(…) in vederea sortarii efective. Doi din trei parametri sunt transferati prin referinta intrucat se doreste modificarea variabilelor respective: $count, care semnaleaza prezenta inversiunilor intre elementele listei de argumente, si, respectiv, $arr, tabloul care stocheaza argumentele.

funcTest(…) este apelata prima data cu valorile unui array initializat pseudoaleator, apoi direct cu apeluri ale functiei rand()  plasate in lista de argumente.

Codul si prinscreenul:

Tuesday, December 15, 2015

Limbajul C. Sortarea unei liste

Este vorba despre o lista simplu inlantuita (LSI), ale carei noduri servesc drept container pentru valori numerice (numere intregi in cazul de fata). Sigur ca se poate obiecta ca e un efort inutil sa scrii cod pentru a sorta secvente de numere intregi folosind structuri, recte LSI. 

Exista varianta binecunoscuta de sortare folosind vectori sau tablouri monodimensionale drept container.

Totusi, structura fiind un tip de data definit de utilizator, este mai flexibila decat un tablou, fie si prin faptul ca un nod al listei, spre deosebire de elementul unui tablou, poate contine mai mult de o variabila de baza la un moment dat.

Ne putem imagina, de pilda, o LSI care stocheaza in fiecare nod trei intregi corespunzand unei date calendaristice: ziua, luna, anul.

Intr-un astfel de caz, LSI este optiunea naturala, in detrimentul celei cu tablouri.

Sortarea unei astfel de liste ar trebui gandita dupa urmatorul algoritm: